我做了一个程序,让用户输入一个名字,如果他们选择了选项2,它将这个名字存储在字符串中,如果用户选择了选项3,它将显示这个名字。现在对于选项4,它需要按字母顺序排列名称,所以当我再次选择选项3以查看名称时,它将按字母顺序显示这些名称我的朋友告诉我使用strcpy(),我尝试了,但没有太成功。
这是我的代码:

//This is my code:

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

int main() {

    int i = 0;
    int j = 0;

    while (1) {
        int num;
        char name[500][100],t[100];
        printf("\nPress 1 to see author info\n");
        printf("Press 2 to enter a name\n");
        printf("Press 3 to view names\n");
        printf("Press 4 to alphabatize names\n");
        scanf("%d", &num);
        char arr[100];


        if (num == 1)
            {
                printf("----------------\n");
                printf("name\n");
                printf("132\n");
                printf("----------------\n");
            }


        if (num == 2)
            {
                printf("Enter the name (no spaces)\n");
                scanf("%s", arr);
                strcpy(name[i], arr);
                i++;
            }
        if (num == 3)
            {
                printf("\n******************************");

                for (int j = 0; j<i; j++)
                    {
                        printf("\n%s\n", &name[j]);
                    }
                printf("\n\n\n******************************");
            }


        if (num == 4)
            {

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

                ;
            }

        return(0)
            system("pause");
    }

最佳答案

如果Barmar不想让评论成为答案:
如前所述:您在外部循环中使用的i是总数,您不能使用它,您需要一个新的,例如k。按字母顺序排序:

int k;
if (num == 4) {
  for (j = 0; j < i; j++) {
    for (k = 0; k < i - j - 1; k++) {
      if (strcmp(name[k], name[k + 1]) > 0) {
        strcpy(t, name[k]);
        strcpy(name[k], name[k+1]);
        strcpy(name[k+1], t);
      }
    }
  }
}

我用了一个稍微不同的方法来做泡泡分类,这就是我学习它的方法,希望你能理解它。
注意:复制完整的字符串不是最好的方法,但是我不知道你是否已经学习了指针。

关于c - 用C语言按字母顺序对字符串进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40186977/

10-12 01:47