在没有空格键的字符串中计数字母

时间:2014-03-20 08:57:22

标签: c# c++ c string counter

我想用函数strlen()计算字符串的长度(包括空格)和没有空格的字符串的长度。前者有效,但我对后者有疑问。

示例:

Hello User//including spaces:10 letters//without spaces:9

当我输入一个没有空格的单词时,程序总是计数:100,当有1个空格时:我得到99,依此类推。

#include<stdio.h>
#include<stdlib.h>

#define N 100

int main()
{
    int counter1 = 0, i;
    char string1[N] = {0};
    {
        gets(string1);
        printf("\nYour Text:\n%s",string1);
        printf("\nLength of String:%i Letters(with spaces)", strlen(string1));
        for(i=0; i<N; i++)
        {
            if(string1[i] != ' ' && string1[i] != '0')
                counter1++;
        }
        printf("Number of Letters(without spaces): %i",counter1);
    }
    return 0;
}

8 个答案:

答案 0 :(得分:4)

您没有认为该字符串以&#39; \ n&#39;终止。您的代码将从0到100运行,因此您将始终获得100。您可以使用以下内容更改代码:

i=0;
while(string1[i]!='\n' && string1[i]!='\0')
{
  if(string1[i]!=' ') {
      counter1++;
  }

  i++;
}

请注意,在C中,默认字符串therminator字符是&#39; \ 0&#39;而不是0

答案 1 :(得分:3)

如果你想要一个C ++答案(你确实添加了C ++标签),那么你可以这样做:

std::string tmp(str);
int cpt = std::count_if(tmp.begin(),tmp.end(),[](char c){return c != ' ';});

答案 2 :(得分:2)

在C#中:

int numberOfChars = yourString != null ? yourString.Replace(" ", "").Count() : 0;

度过愉快的一天,

阿尔贝托

答案 3 :(得分:2)

while(str[i]!='\0')
 {
     if(str[i]!=' ')
     {
         count++;
     }
     i++;
 }

这个循环可以工作或者将你的循环设置为

for(i=0; i<strlen(string1); i++)
        {
            if(string1[i] != ' ' && string1[i] != '0')
                counter1++;
        }

因为您使用了

for(i=0; i<N; i++)

其中N=100和c不会检查超出限制的访问权限,因此循环一直持续到i=100,这导致count=100-number of spaces

答案 4 :(得分:1)

您必须检查NULL(string1 [i] == 0)字符。一旦遇到NULL,就从for循环中断。

答案 5 :(得分:1)

我的方法是:

int len = strlen(string1);
int lenWithoutSpace = len;
for(int i=0; i<len; ++len){
  if(string1[i]==' '){
    lenWithoutSpace--;
  }
}

答案 6 :(得分:0)

尝试以下代码:

int main()
{
int counter1=0,i;
char string1[N]={0};
{   
gets(string1);
printf("\nYour Text:\n%s",string1);
printf("\nLength of String:%i Letters(with spacebar)",strlen(string1));
 for(i=0;i<strlen(string1);i++)
{
  if(string1[i]!=' '&&string1[i]!='0')
    counter1++;
}    
printf("Number of Letters(without spacebar): %i",counter1);
}
return 0;
}

答案 7 :(得分:0)

你的循环加起来为100,不包括空格和&#39; 0&#39;,我相信你希望它是&#39; \ 0&#39;。将循环更改为0到strlen(string1)和if条件,它应该可以正常工作。虽然可以有更好的方法。