我做了一个程序,让用户输入一个名字,如果他们选择了选项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/