Когда функция обнаруживает пробел, то просто пропускает 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;
}
Другие языки программирования и технологии
[C++ ] Не могу обнаружить наличие пробела при анализе текста
Зачем всё это, если тупо символы считать?
#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;
}
#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;
}
Первое: это зачем использовать альтернативные операторы - and вместо привычных && ?
Второе: Условие в else звучит примерно так: если символ (element ) равен концу текста (переход на другую строку это \n) и одновременно следующий символ за ним равен какой то букве. У меня возникает вопрос: вы уверены что ничего не напутали? Я даже не уверен что такое условие сработает. А еще и выход за пределы массива *(parr + i + 1) - если i в этот момент будет равна размеру массива минус один (последний элемен находится по такому адресу, а вы читаете этот же адрес но плюс один).
Вердикт: условие в else измените до нормального и будет вам счастье!
Эээ... Так нечестно менять вопрос на ходу! В начале было так:
else if (element == '\0' and isalpha(*(parr + i + 1))); Ответ относился к этому коду. Сейчас уже по другому.
Слушайте, вам нужно подсчитать количество слов в тексте? Если да, то воспользуйтесь функцией strtok из библиотеки cstring и так будет легче. Читаем в интернете как ее использовать.
Второе: Условие в else звучит примерно так: если символ (element ) равен концу текста (переход на другую строку это \n) и одновременно следующий символ за ним равен какой то букве. У меня возникает вопрос: вы уверены что ничего не напутали? Я даже не уверен что такое условие сработает. А еще и выход за пределы массива *(parr + i + 1) - если i в этот момент будет равна размеру массива минус один (последний элемен находится по такому адресу, а вы читаете этот же адрес но плюс один).
Вердикт: условие в else измените до нормального и будет вам счастье!
Эээ... Так нечестно менять вопрос на ходу! В начале было так:
else if (element == '\0' and isalpha(*(parr + i + 1))); Ответ относился к этому коду. Сейчас уже по другому.
Слушайте, вам нужно подсчитать количество слов в тексте? Если да, то воспользуйтесь функцией strtok из библиотеки cstring и так будет легче. Читаем в интернете как ее использовать.
Похожие вопросы
- подскажите через кудой решать эту задачку с++2)Дан текст. Слова в тексте разделены пробелами. Вычеркнуть из текста вс
- c++ не могу понять в чем ошибка в небольшом примере
- Задача по C++ Не могу придумать как одновременно записывать в массив и считать функцию.
- вопрос по c++ .не могу точно понять использование #ifdef, #ifndef.
- Как уменьшить пробелы между словами в тексте Ворда?
- Как без особых сложностей убрать огромные пробелы в тексте. Когда я убираю их, стирается весь пробел полностью
- Помогите с кодом C#. Нужно удалять из строк начальные пробелы с помощью while, if, for, без специальных методов
- Дан текст. файл. Вывести слово текста наимен. длины. Слово- набор симолов без пробелов и огран. пробелом. Помогите ПЛЗ!
- Как быстро преобразовать старое жесткое форматирование абзацев текста (пробелами) в нормальное?
- Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
я хотел создать условие: если element - пробел и след. element это символ, то цикл продолжает выполняться (потомучто это нормальная ситуация, а вот когда будет конце текста, то условие не выполниться)