2015-11-07 119 views
1

我有一个问题,我的程序在C中必须找到带有N个字母的单词,并按字典顺序对它们进行计数并将它们保存到另一个文件中。我怎样才能按字母顺序排列单词?排序字母在C中的排序

这是我的代码:

#include <stdio.h> 
#include <conio.h> 
#include <ctype.h> 
#include <stddef.h> 
#include <string.h> 

int main() 
{ 
FILE *r, *fp; 
char ch[100],t[100]; 
int n,i,j,x=0; 


r=fopen("text.txt","r"); 
fp=fopen("text2.txt","w"); 
fgets(ch, 100, r); 


char *start; 
int len; 
char *s = ch; 
char *p = s; 
printf("Give the length of word: "); 
scanf("%d",&n); 
printf("\n\nWords with %d letters: \n\n",n); 
    while (*p) { 

     while (*p && isspace(*p)) 
      ++p; 
     start = p; 

     while (*p && !isspace(*p)) 
      ++p; 

     len = p - start; 

     if (len == n) { 

      printf("%.*s\n", len, start); 
       x++; 

      fprintf(fp,"%.*s",len, start); 

     }  
    }  


printf("\nNumber of words: %d ",x); 
fclose(fp); 



getch();  
fclose(r); 
} 
+1

实现您自己的排序函数 – AkaSh

回答

0

可以很容易地编写一个函数来排序的话alphabeticly它是非常相似的排序字母字符来对您在数组上迭代的字符进行排序,并且一次比较两个字符。如果第一个字符大于第二个字符,则将它们交换并循环,直到完成。在字词的情况下,您必须迭代字符串,并且遍历它们的字符以进行必要的交换。下面是一个示例:

#include <stdio.h> 

int s_bubblesort(int argc,char **argv); 

int main(void) 
{ 
    char *elements[9] = { "zab","aaaa","bac","zzz","abc","cab","aaa","acc","aaaaaaaaa" }; 

    s_bubblesort(9,elements); 

    for(int n = 0 ; n < 9 ; n++) 
    { 
     printf("%s\n",elements[n]); 
    } 
} 

int s_bubblesort(int argc,char **argv) 
{ 
    //loop variables 
    int i,j; 

    //p_1 : pointer that points to current string,p_2 : pointer that points to next string 
    char *p_1 , *p_2 , *tmp; 

    for(j = 0 ; j < argc ; j++) 
    { 
     for(i = 0 ; i < argc - j - 1 ; i++) 
     { 
      //assign p_1 to current string,and p_2 to next string 
      p_1 = argv[i] , p_2 = argv[i+1]; 

      //while *p_1 != '\0' and *p_2 != '\0' 
      while(*p_1 && *p_2) 
      { 
       //if *p_1 less than *p_2,break and move to next iteration 
       if(*p_1 < *p_2) 
        break; 

       else if(*p_1 > *p_2 || (! *(p_2 + 1) && (*p_1 == *p_2) && *(p_1+1))) // if *p_1 > *p_2,or *(p_2 + 1) == '\0' and *p_1 == *p_2 and *(p_1 + 1) != '\0' { SWAP } 
       { 
        tmp = argv[i]; 

        argv[i] = argv[i+1]; 

        argv[i+1] = tmp; 

        break; 
       } 
       p_1++; 
       p_2++; 
      } 
     } 
    } 
    return 0; 
}