Подсчет букв в строке без пробела

0

Я хочу подсчитать длину строки (включая пробелы) с помощью функции 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;
}
  • 7
    C , C++ , C# : выбрать один. Кроме того, ваше условие if неверно.
  • 1
    Цикл for не должен идти до N, только до strlen (string1)
Показать ещё 7 комментариев
Теги:
string
counter

8 ответов

2
Лучший ответ
while(str[i]!='\0')
 {
     if(str[i]!=' ')
     {
         count++;
     }
     i++;
 }

этот цикл работает или chyage для цикла 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.

  • 0
    Спасибо за ваше решение. ;)
4

Вы не считали, что строка завершается с \n. Ваш код будет работать от 0 до 100, поэтому вы всегда получите 100. Вы можете изменить свой код примерно так:

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

  i++;
}

Пожалуйста, обратите внимание, что в C символ символа строки по умолчанию равен '\ 0', а не 0

  • 0
    Код не компилируется.
  • 0
    @MichaelWalz Я изменил код, поэтому теперь он должен компилироваться без ошибок
Показать ещё 3 комментария
3

если вы хотите ответить на C++ (вы добавили тег C++), вы можете сделать:

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

В С#:

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

Хорошего дня,

Alberto

  • 0
    Это терпит неудачу, если yourString NULL .
  • 0
    Я предположил, что это было проверено, и что вопрос был в другом ... Во всяком случае, вот улучшенное решение. Спасибо
1

мой подход:

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

Вы должны проверить символ NULL (string1 [i] == 0). После того, как вы встретите NULL, перерыв в цикле for.

0

Ваш цикл добавляет до 100, исключая пробел и "0", и я считаю, что вы хотите, чтобы он был "\ 0". Измените цикл на 0 на strlen (string1) и условие if, и оно должно работать нормально. Хотя могут быть и лучшие способы.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню