在没有空格键的情况下计算字符串中的字母

Posted

技术标签:

【中文标题】在没有空格键的情况下计算字符串中的字母【英文标题】:Count Letters in String without Spacebar 【发布时间】:2014-03-20 08:57:22 【问题描述】:

我想用函数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;

【问题讨论】:

C, C++, C#:选择一个。另外,您的if 条件不正确。 for 循环不必一直到 N,只要到 strlen(string1) gets没有边界检查,用fgets代替gets。 这样的条件if(string1[i]!=' ' &amp;&amp; string1[i]!='\0') 请注意,空格键是键盘键,它产生的字符只是称为空格。 【参考方案1】:

您还没有考虑到字符串以'\n' 结尾。您的代码将从 0 运行到 100,因此您将始终得到 100 作为结果。你可以用这样的方式改变你的代码:

i=0;
while(string1[i]!='\n' && string1[i]!='\0')

  if(string1[i]!=' ') 
      counter1++;
  

  i++;

请注意,在 C 中,默认的字符串 therminator 字符是 '\0' 而不是 0

【讨论】:

代码无法编译。 @MichaelWalz 我已经更改了代码,所以现在它应该可以正常编译了 此代码有效,我必须将 \n 添加到循环中。 for(i=0;i @user3336852 我发布的解决方案只有一个。你可以找到不止一个(看看其他答案)【参考方案2】:

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

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

【讨论】:

【参考方案3】:
while(str[i]!='\0')
 
     if(str[i]!=' ')
     
         count++;
     
     i++;
 

此循环有效或将您的 for 循环更改为

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】:

在 C# 中:

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

祝你有美好的一天,

阿尔伯托

【讨论】:

如果yourStringNULL,这将失败。 我认为它已被检查并且问题的重点是另一个问题......无论如何,这是改进的解决方案。谢谢【参考方案5】:

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

【讨论】:

【参考方案6】:

我的方法是:

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

【讨论】:

【参考方案7】:

试试下面的代码:

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;

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于在没有空格键的情况下计算字符串中的字母的主要内容,如果未能解决你的问题,请参考以下文章

限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?

python学习-写函数,计算传入字符串中数字字母空格] 以及 其他的个数

需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式

JAVA 判断字母,数字,空格,标点符号的方法。 (没有分了,请大家帮帮忙~谢谢~)

写函数,计算传入字符串中数字字母空格] 以及 其他的个数

如何计算熊猫数据框中的非字母数字字符