gpt4 book ai didi

C中的字符计数

转载 作者:太空狗 更新时间:2023-10-29 17:18:09 24 4
gpt4 key购买 nike

我正在尝试编写一个程序来计算字符串中的所有字符。我最初拥有它,但后来意识到我无法数空格。我不明白为什么这不起作用。

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 是一个 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 空终止数组,您将需要查看该类以了解如何循环遍历它。

以上所有内容还假定您正在处理 ASCII 字符串。如果您要处理 UTF 编码的字符串,则必须处理多字节字符。


重新编辑:它有很大的不同:scanfstop on the first blank (我忘记了)。但是,如果您没有正确声明 z,它可能会产生更大的差异。 (我还建议在使用 scanf 读取字符串时使用字段宽度 [或完全避免使用 scanf];否则,您无法控制它将读取的字符数尝试存储,因此理论上,没有缓冲区足够大以避免溢出。更多信息在这里:http://www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html )

关于C中的字符计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com