我创建了一个程序,要求用户输入一个单词,然后按字母顺序排列该单词中的字母并将其存储在另一个字符串中。
#include <stdio.h>
main()
{
char in[100],out[100],ch;
int i,len,j=0;
//ask user for a word
printf("Enter a word: ");
scanf("%s",in);
//arrange that word in alphabetical order
for(ch = 'a'; ch <= 'z'; ++ch)
for(i = 0; i < strlen(in); ++i)
if(in[i] == ch)
{
out[j] = ch;
++j;
}
//print the word
printf("%s",out);
fflush(stdin);
getchar();
}
问题是当word存储在另一个字符串中时,该字后面会有一些额外的字母或符号。有人可以告诉我我的代码可能有什么问题吗?
答案 0 :(得分:4)
你不是null terminating输出字符串。 printf("%s",out);
会一直输出字符,直到找到0('\0'
)。有很多方法可以解决这个问题:
在for循环后终止输出到当前迭代器位置:
out[j] = '\0';
使输出的长度与输入相同:
out[strlen(in)] = '\0';
声明一个0初始化数组:
char out[100] = { 0 };
用自己的零填充输出数组:
memset(out, 0; sizeof(out));
...
就排序而言,如果仅仅是为了学习那么它很好,否则你应该选择更高效的sorting algorithm
答案 1 :(得分:3)
C字符串以空值终止
使用
out[j] ='\0';
之前printf
%s
说明符搜索空终止。
在你的情况下,它一直打印,直到找到一个,所以你得到一些随机符号。
同时避免使用fflush
。
您可能希望更新逻辑以对大写字符进行排序。
您可能希望使用排序bubble sort
l=strlen(in);
for(i = 0; i < l; i++)
{
for(j = i + 1; j < l - 1; j++)
if(in[j-1] > in[j]){
ch = in[j];
in[j] = in[j-1];
in[j-1] = ch;
}
}
printf("Sorted String :%s",in);