我正在尝试编写一个计算字符串中所有字符的程序.我原本拥有它,但后来意识到我无法计算空间.我不明白为什么这不起作用.
for(m=0; z[m] != 0; m++) {
if(z[m] != ' ') {
charcount ++;
}
}
Run Code Online (Sandbox Code Playgroud)
任何协助赞赏.
编辑*如果像这样扫描输入(字符串),它会有所不同吗?是的,一切都已初始化.我已经尝试打印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 ++;
}
}
Run Code Online (Sandbox Code Playgroud)
你需要初始化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 ++;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用String某种类而不是旧式的C null终止数组,那么您将需要查看该类以了解如何循环它.
以上所有内容也假设您正在处理ASCII字符串.如果您正在处理UTF编码的字符串,则必须处理多字节字符.
重新编辑:它会产生很大的不同:scanf将停在第一个空白处(我忘记了).但是,如果你没有z正确宣布,它可能会产生更大的差异.(我还建议在scanf用于读取字符串时使用字段宽度[或scanf完全避免];否则,您无法控制它将尝试存储的字符数量,因此理论上,没有缓冲区足够大避免溢出.更多信息请访问:http://www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html)