我正在尝试编写一个程序来计算字符串中的所有字符。我本来有它,但后来意识到我无法计算空格。我不明白为什么这不起作用。
for(m=0; z[m] != 0; m++) {
if(z[m] != ' ') {
charcount ++;
}
}
任何帮助表示赞赏。
编辑* 如果像这样扫描输入(字符串),会有什么不同吗?是的,一切都已初始化。我也尝试过打印 z[m] 计算的值,但它不是“m”处字符串的实际值,我认为这就是问题所在。
for(j=0; j<7; j++){
printf("Enter a string:\n");
scanf("%s", z);
for(m=0; z[m] != 0; m++){
if(z[m] != ' '){
charcount ++;
}
}
你需要初始化charcount
。除此之外,它应该有效,前提是z
是一个以零结尾的字符数组,m
is an int
或类似的。我可能会写z[m]
而不是z[m] != 0
(因为 !0 = true 且 0 = false),但两者都有效。有更有效的方法可以做到这一点(尽管现在我打赌编译器会为您将其转换为基于指针的循环)。
这是一个完整、正确的示例,只需进行最少的编辑:
const char * z = "testing one two three";
int m;
int charcount;
charcount = 0;
for(m=0; z[m]; m++) {
if(z[m] != ' ') {
charcount ++;
}
}
如果您使用的是String
如果您希望使用某种类型的类而不是老式的 C 以 null 终止的数组,您将需要查看该类以了解如何循环遍历它。
上述所有内容还假设您正在处理 ASCII 字符串。如果您正在处理 UTF 编码的字符串,则必须处理多字节字符。
重新编辑:这有很大的不同:scanf
will 停在第一个空白处 http://www.cplusplus.com/reference/clibrary/cstdio/scanf/(我忘记了)。不过,如果您不声明,情况可能会比这更大z
正确。 (我还建议在使用时使用字段宽度scanf
用于读取字符串[或避免scanf
完全];否则,您无法控制它将尝试存储的字符数,所以理论上,任何缓冲区都不会大到足以避免溢出。更多这里:http://www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html http://www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)