2016-03-15 122 views
1

這出現在我們的實驗室總決賽考試中: 製作一個程序,將10個字符串輸入輸入到一個數組中。 然後按字母順序輸出字符串。C:按字母順序排列字符數組陣列

我在考試期間弄不清楚,現在我想知道它究竟做了些什麼。

到目前爲止,這是我所做的。它不適用於類似或等效的字符串,它們的索引會丟失?任何人都可以使用stdio.h和string.h庫共享他們的解決方案?

/*Write a program that takes 10 strings input into an array and outputs them in alphabetical order*/ 

    #include<stdio.h> 
    #include<string.h> 

    char strings[10][150]; 
    char ordered[10][150]; 
    int i,j,k; 
    int ind; 

    main() 
    { 
     printf("INPUT 10 STRINGS\n"); 
     for(i=0;i<10;i++) 
     { 
      gets(strings[i]); 
     } 

     for(i=0;i<10;i++) 
     { 
      ind=0; 
      for(j=0;j<10;j++) 
      { 
       if(strings[i][0]<strings[j][0]) 
       { 
        ind++; 
       } 
       else if(strings[i][0]==strings[j][0]) 
       { 
        k=0; 
        while((strings[i][k]==strings[j][k])&&strings[j][k+1]!='\0') 
        { 
         if(strlen(strings[i])<strlen(strings[j])) 
         { 
          if(strings[i][k+1]=='\0') 
          { 
           ind++; 
          } 
          else if(strings[i][k+1]<strings[j][k+1]) 
          { 
           ind++; 
          } 
         } 
         else if(strlen(strings[i])>strlen(strings[j])) 
         { 
          if(strings[i][k+1]<strings[j][k+1]) 
          { 
           ind++; 
          } 
         } 
         k++; 
        } 
       } 
      } 
      strcpy(ordered[ind],strings[i]); 
     } 


     printf("STRINGS: \n"); 
     for(i=9;i>-1;i--) 
     { 
     puts(ordered[i]); 
     } 
    } 
+0

使用STRCMP和strcpy – AkaSh

+2

爲避免複製,我建議聲明一個字符串指針數組。而不是複製字符串,移動指針會快得多。 – Dere0405

回答

0

剛剛發現了一個簡單的方法:

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    int i,j,n; 
    char str[20][20],temp[20]; 
    puts("Enter the no. of string to be sorted"); 
    scanf("%d",&n); 
    for(i=0;i<=n;i++) 
    { 
     gets(str[i]); 
    } 
    for(i=0;i<=n;i++) 
     for(j=i+1;j<=n;j++) 
     { 
      if(strcmp(str[i],str[j])>0) 
      { 
       strcpy(temp,str[i]); 
       strcpy(str[i],str[j]); 
       strcpy(str[j],temp); 
      } 
     } 
    printf("The sorted string\n"); 

    for(i=0;i<=n;i++) 
    { 
     puts(str[i]); 
    } 
    return 0; 
} 
0

strcmpstrcpystring.h

for (i=0; i<10; i++) { 
     for (j=0; j<9; j++) { 
     if (strcmp(strings[j], strings[j+1]) > 0) { 
      strcpy(temp, strings[j]); 
      strcpy(strings[j], strings[j+1]); 
      strcpy(strings[j+1], temp); 
     } 
     } 
    } 
0

定義內置功能,下面是從here檢索的解決方案,你想要做什麼,但與5個字符串代替。使其排序10串,而不是5.我已經適應了它的所有字符串最多有20個字符:

#include<stdio.h> 
#include<string.h> 

void main() { 
    char s[10][20], t[20]; 
    int i, j; 
    clrscr(); 

    printf("\nEnter any five strings : "); 
    for (i = 0; i < 10; i++) 
     scanf("%s", s[i]); 

    for (i = 1; i < 10; i++) { 
     for (j = 1; j < 10; j++) { 
     if (strcmp(s[j - 1], s[j]) > 0) { 
      strcpy(t, s[j - 1]); 
      strcpy(s[j - 1], s[j]); 
      strcpy(s[j], t); 
     } 
     } 
    } 

    printf("\nStrings in order are : "); 
    for (i = 0; i < 10; i++) 
     printf("\n%s", s[i]); 

    getch(); 
}