在没有空格键的情况下计算字符串中的字母
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]!=' ' && 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如果你想要一个 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;
祝你有美好的一天,
阿尔伯托
【讨论】:
如果yourString
是NULL
,这将失败。
我认为它已被检查并且问题的重点是另一个问题......无论如何,这是改进的解决方案。谢谢【参考方案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学习-写函数,计算传入字符串中数字字母空格] 以及 其他的个数
需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式