Я хочу подсчитать длину строки (включая пробелы) с помощью функции 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;
}
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
.
Вы не считали, что строка завершается с \n. Ваш код будет работать от 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 != ' ';});
В С#:
int numberOfChars = yourString != null ? yourString.Replace(" ", "").Count() : 0;
Хорошего дня,
Alberto
yourString
NULL
.
мой подход:
int len = strlen(string1);
int lenWithoutSpace = len;
for(int i=0; i<len; ++len){
if(string1[i]==' '){
lenWithoutSpace--;
}
}
Вы должны проверить символ NULL (string1 [i] == 0). После того, как вы встретите NULL, перерыв в цикле for.
Ваш цикл добавляет до 100, исключая пробел и "0", и я считаю, что вы хотите, чтобы он был "\ 0". Измените цикл на 0 на strlen (string1) и условие if, и оно должно работать нормально. Хотя могут быть и лучшие способы.
попробуйте следующий код:
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;
}
C
,C++
,C#
: выбрать один. Кроме того, ваше условиеif
неверно.