计算不带空格键的字符串中的字母

本文关键字:字符串 计算 空格键 | 更新日期: 2023-09-27 17:51:07

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

计算不带空格键的字符串中的字母

您没有考虑字符串以"'"结尾。您的代码将从 0 运行到 100,因此您将始终得到 100。你可以用这样的东西来更改你的代码:

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

请注意,在 C 中,默认字符串热器字符是"''0"而不是 0

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

std::string tmp(str);
int cpt = std::count_if(tmp.begin(),tmp.end(),[](char c){return c != ' ';});
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

在 C# 中:

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

有好的一天

阿尔贝托

必须检查 NULL (string1[i] == 0( 字符。遇到 NULL 后,请中断 for 循环。

我的方法是:

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

尝试以下代码:

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

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