Другие языки программирования и технологии

[C++ ] Не могу обнаружить наличие пробела при анализе текста

Когда функция обнаруживает пробел, то просто пропускает else if и сразу прыгает в else
int amounts_of_chars(char* parr, int text_size) {
char element;
int amounts_of_chars = 0;
for (int i = 0; i < text_size; i++)
{
element = *(parr + i);
if (isalpha(element))
{
amounts_of_chars++;

}
else if (isspace(element) and isalpha(*(parr + i + 1)));

else break;
}
return amounts_of_chars;
}
Зачем всё это, если тупо символы считать?

#include <iostream>
using namespace std;
int amounts_of_chars(string s){
 int r = 0;for(int i = 0; i < s.length(); r += isalpha(s[i++]) ? 1 : 0);return r;
}
int main(){
 string s = "asb asjes 6*0sf ddeew!";
 cout << amounts_of_chars(s);
 return 0;
}
Даниил Торопкин
Даниил Торопкин
69 079
Лучший ответ
Первое: это зачем использовать альтернативные операторы - and вместо привычных && ?
Второе: Условие в else звучит примерно так: если символ (element ) равен концу текста (переход на другую строку это \n) и одновременно следующий символ за ним равен какой то букве. У меня возникает вопрос: вы уверены что ничего не напутали? Я даже не уверен что такое условие сработает. А еще и выход за пределы массива *(parr + i + 1) - если i в этот момент будет равна размеру массива минус один (последний элемен находится по такому адресу, а вы читаете этот же адрес но плюс один).
Вердикт: условие в else измените до нормального и будет вам счастье!
Эээ... Так нечестно менять вопрос на ходу! В начале было так:
else if (element == '\0' and isalpha(*(parr + i + 1))); Ответ относился к этому коду. Сейчас уже по другому.
Слушайте, вам нужно подсчитать количество слов в тексте? Если да, то воспользуйтесь функцией strtok из библиотеки cstring и так будет легче. Читаем в интернете как ее использовать.
Школа2 Школа2 я хочу найти кол-во символов
я хотел создать условие: если element - пробел и след. element это символ, то цикл продолжает выполняться (потомучто это нормальная ситуация, а вот когда будет конце текста, то условие не выполниться)

Похожие вопросы