所以我将混合字母和数字的字符串数组与字母表中的数组进行比较,然后收集相似的字符(即:只显示字母)并将其放入不同的字符串数组然后打印出来。
第一次工作正常。虽然第二次,如果与字母表进行比较的字符串小于一定的大小,它会填满并显示一些额外的字母,有时还会出现一个问号,而不是在哪里。
这是第一次围绕输出:
Enter a string (1-40 characters): zxcvbnm,./asdfghjkl;qwertyuiop[]
Output: abcdefghijklmnopqrstuvwxyz
然后是第二次:
Enter a string (1-40 characters): abcdefg
Output: abcdefgz?
明白我的意思? “Z?突然冒出来。
是否有人在缓冲区中留下了一些字母或者再次调用该函数后的任何内容?
It turns out that I didn't have a null terminator at the end of the newest
string before being printed! - Thanks to Mohamed!
答案 0 :(得分:3)
C中的字符串是NUL终止的你需要在打印之前终止你的字符数组。
将最后一个字符设置为'\0'
。
答案 1 :(得分:3)
检查您的代码,您的字符串应以空字符'\0'
结束。这是导致问题的原因。
在你的代码中你必须添加
letters[z]= '\0';
在for
for (x = 0; x < 26; x++){
for (y = 0; y < strLen1; y++){
if (alphabet[x] == string[y])
{
letters[z]=string[y];
/* Increment z, to insert anothe letter in an empty space. */
z++;
}
}
}
letters[z]= '\0'; // add this line
printf("Output: %s\n\n", letters);
顺便说一句,你可以优化你的字母表检查
小写字母{a,b,c,......,z}用它们的ASCII重新进行。
因此您可以检查string[y]
的ASCII是否在'a'
的ASCII和'z'
的ASCII之间,而不是查看alphabet[]
数组。它更简单
答案 2 :(得分:0)
您应该使用isalpha()
来检查char
是否是字母字符。无需重新发明,然后也无需手动转换为小写,因为它可以处理。