我正在尝试编写一个计算字符串中所有字符的程序。 我原本拥有它,但后来意识到我无法计算空间。 我不明白为什么这不起作用。
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 =真,0 =假),但两者都有效。 有更有效的方法(虽然这些天我打赌编译器会处理将它转换为基于指针的循环)。
这是一个完整,正确的示例,只需进行少量编辑:
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
将停在第一个空白处 (我忘记了)。 但是,如果你没有正确地声明z
,它可能会产生更大的差异。 (我还建议在使用scanf
读取字符串时使用字段宽度[或完全避免使用scanf
];否则,您无法控制它将尝试存储的字符数,因此理论上 ,不会有缓冲区大到足以避免溢出。更多信息: http : //www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html )
你可以使用strlen()
我建议使用while
循环,并使用更有意义的变量名称
m = textIndex z = text
像这样的东西会起作用
while (text[textIndex] != 0x00) { textIndex++; }
而不是使用scanf,尝试这样的fgets:
char input[256]; fgets(input, sizeof(input), stdin);
fgets将从文件中读取整行。 因此,将stdin作为文件句柄传递将使其从标准输入读取,这在大多数情况下将绑定到控制台。 但要注意的一件事是,从fgets获得的字符串可能包含换行符。 我建议使用ctype.h中的isspace函数,它将检查各种forms的空白(包括常规空格和换行符),而不是使用空格字符(”)显式检查字符串中的不等式。
这是一个完整的,可运行的示例:
#include #include int count_nonspace(const char* str) { int count = 0; while(*str) { if(!isspace(*str++)) count++; } return count; } int main() { char input[256]; fgets(input, sizeof(input), stdin); printf("%dn", count_nonspace(input)); }
是的,输入扫描与scanf有所不同:
scanf("%s", z); ... if(z[m] != ' '){
scanf(“%s”…)总是在空格字符处断开,因此你的确如此 。 更好地使用fgets从stdin读取,
#define MAXINPUT 80 char line[MAXINPUT]; for(j=0; j<7; j++) { printf("Enter a string:n"); if( fgets( line, 80, stdin ) ) { char *c=line; if( strchr(line,'n') ) *strchr(line,'n')=0; while( *c ) { if( *c!=' ' ) ++charcount; ++c; } } }
或者,如果你想要WHITE -spaces,那就拿
#include ... if( !isspace(*c) )
以上就是c/c++开发分享计算C中的字符相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560389.html