计算C中的字符

时间:2010-09-19 12:26:03

标签: c count character

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

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 ++;
                }
        }

4 个答案:

答案 0 :(得分:6)

您需要初始化charcount。除此之外,它应该有效,前提是z是一个以零结尾的字符数组,而mint或类似字符。我可能只写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) )