Функция isalpha() не работает с пробелами в строке

Я написал код, чтобы он удалял все (например, пробелы и другие вещи), кроме буквенных символов, используя функцию isalpha(), и преобразовывал их в нижний регистр с помощью функции tolower(). Он работает нормально, если я не помещаю пробел в строку, но если в строке есть пробел, он выходит за пределы пробела. Я не понимаю, почему это происходит. Это код, который я написал.

#include<bits/stdc++.h>
#include<cstring>
#include<cctype>
using namespace std;
int main()
{
    int i;
    string A,b="";
    cin>>A;
    for(i=0;i<A.size();i++)
    {
        if(isalpha(A[i]))
        b+= tolower(A[i]);
        
        else
        continue;
        
    }
    cout<<b;
}

Помогите пожалуйста мне. Спасибо


person purple_tulip    schedule 23.07.2020    source источник
comment
Что такое ввод, для которого он терпит неудачу? Каков результат, который вы получаете в этом тестовом примере? Каков ожидаемый результат?   -  person Deepak Patankar    schedule 23.07.2020
comment
Так много повторяющихся вопросов на выбор...   -  person paddy    schedule 23.07.2020
comment
Добавьте эту строку cout << A << '\n'; Тогда вы можете понять, что происходит   -  person john    schedule 23.07.2020
comment
Например, я даю input= adhGHt//'[]\Klj hyjc//ghDf, тогда он будет возвращать вывод как adhghtklj вместо возврата adhghtkljhyjcghdf   -  person purple_tulip    schedule 23.07.2020
comment
Это не решает вопрос, но else continue; можно удалить. Это ничего не делает.   -  person Pete Becker    schedule 23.07.2020


Ответы (2)


cin >> A; считает пространство для завершения ввода.

Чтобы получить всю строку, используйте getline(cin, A);

person sabik    schedule 23.07.2020

cin читает строку до первого встречного пробела, если ваша входная строка — Hello World, то cin будет читать только Hello.

Вы можете использовать функцию getline для чтения всей строки.

person Deepak Patankar    schedule 23.07.2020