我正在尝试编写一个计算字符串中所有字符的程序。我原本拥有它,但后来意识到我无法计算空间。我不明白为什么这不起作用。
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 ++;
}
}
答案 0 :(得分:6)
您需要初始化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 null终止数组,那么您将需要查看该类以了解如何循环它。
以上所有内容也假设您正在处理ASCII字符串。如果您正在处理UTF编码的字符串,则必须处理多字节字符。
重新编辑:它会产生很大的不同:scanf
将会stop on the first blank(我已经忘记了)。但是,如果你没有正确地声明z
,它可能会产生更大的差异。 (我还建议在使用scanf
读取字符串[或完全避免scanf
]时使用字段宽度;否则,您无法控制它将尝试存储的字符数,因此理论上,没有缓冲区足够大以避免溢出。更多信息:http://www.crasseux.com/books/ctutorial/String-overflows-with-scanf.html)
答案 1 :(得分:4)
您可以使用strlen()
我建议使用while
循环,并使用更有意义的变量名称
m = textIndex
z = text
这样的事情会起作用
while (text[textIndex] != 0x00)
{
textIndex++;
}
答案 2 :(得分:2)
不要使用scanf,请尝试这样的fgets:
char input[256];
fgets(input, sizeof(input), stdin);
fgets将从文件中读取整个行。因此,将stdin作为文件句柄传递将使其从标准输入读取,这在大多数情况下将绑定到控制台。但要注意的一件事是,你从fgets获得的字符串可能包括换行符。我建议使用ctype.h中的isspace函数来检查各种形式的空格(包括常规空格和换行符),而不是使用空格字符('')显式检查字符串中的不等式。
这是一个完整的,可运行的例子:
#include <stdio.h>
#include <ctype.h>
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("%d\n", count_nonspace(input));
}
答案 3 :(得分:0)
是的,输入扫描与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 - 空格,请点击
#include <ctype.h>
...
if( !isspace(*c) )