Выходные данные Befor для ввода строки для поиска палиндрома - PullRequest
0 голосов
/ 30 мая 2018

Этот код выдает YES сразу после ввода значения контрольного примера.Код: для буквенно-цифрового паллиндрома

int main() {
    int t;
    cin>>t;
    while(t--){
        string s;
        int count = 0,size = 0;
        getline(cin,s);
        cout<<s<<endl;
        s.erase(remove_if(s.begin(),s.end(),not1(ptr_fun((int(*)(int))isalnum))), s.end());
        for(int i=0;i<=s.size()/2;i++){
            size++;
            if(tolower(s[i])==tolower(s[s.size()-i-1])){
                count++;
            }
            else
                break;
        }
        if (count==size)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

Вывод, который я получаю, - ДА, без ввода строки

For Input:
2
I am :IronnorI Ma, i
Ab?/Ba
Your Output is:

YES
I am :IronnorI Ma, i
YES

1 Ответ

0 голосов
/ 30 мая 2018

Этот код выдает YES сразу после ввода значения тестового примера.Вывод, который я получаю, - ДА, без ввода строки

Ваша проблема здесь:

/* code */
    cin>>t;    -----------> std::cin        
    while(t--)
    {
        string s;
        int count = 0,size = 0;
        getline(cin,s); ------------> std::getline()

/* remaining code */

Чтение с чем-то вроде std::cin оставляет новую строку во входном потоке.Когда поток управления достигнет std::getline(), новая строка будет отброшена, но ввод немедленно прекратится.Это приводит к тому, что std::getline() s пытается прочитать новую строку и пропускает ввод.

FIX : при переключении с пробела, разделенного символом ввода на новую строку, вы хотите очистить все символы новой строки отвведите поток std::cin.ignore()

Фиксированный код должен быть: https://www.ideone.com/ucDa7i#stdin

#include <iostream>
#include <string>
#include <limits>
#include <algorithm>

int main()
{
    int t;
    std::cin >> t;
    // fix
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    while(t--)
    {
        std::string s;
        int count = 0,size = 0;
        getline(std::cin,s);
        /* remaining code */
}
...