s.erase не работает при попытке удалить пробелы из строки - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь удалить пробелы из строки, чтобы проверить фразу палиндрома. Я искал другие методы, но мой профессор буквально скопировал и вставил в наши инструкции пробел «Удалить место для цикла», но я не могу заставить его работать, и он говорит, что не хочет, чтобы мы обращались в Интернет за помощью. Я пытаюсь удалить пробелы из фразы типа «слишком жарко, чтобы кричать», чтобы подтвердить это. Я могу заставить свою программу работать с отдельными словами типа «боб», но не с фразами.

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
char input[100];
cout << "Please enter a word/phrase: ";
cin >> input;

for (int i = 0; i < strlen(input); i++)
{

    while (s[i] == ' ')//getting "s" is undefined error
        s.erase(i,1);
}

int i = 0; 
int j = strlen(input)-1;
bool a = true;

    for (i = 0; i < j; i++)
    {
        if (input[i] != input[j])
        {
            a = false;
        }
        j--;
    }

    if(a)
    {
        cout << input << " is a Valid Palindrome." << endl;
    }
    else
    {
        cout<< input << " is not a Valid Palindrome." << endl;
    }

system("pause");
return 0;
}

1 Ответ

0 голосов
/ 10 марта 2019

Возможно, вы не скопировали результат из временной переменной 's'. Итак, модифицированные коды должны быть:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cstring>
using namespace std;

int main(int argc, char *argv[])
{
    char input[100];
    cout << "Please enter a word/phrase: ";
    fgets(input, 100, stdin);

    string s(input);    // define a temporary variable 's'
    int i = 0; 
    while (i < s.length())
    {
        if (s[i] == ' ' || s[i] == '\n')
        {
            s.erase(i, 1);      // erase from variable 's', other then 'input'
            continue;
        }
        i++;
    }

    // copy result from 's' to 'input'
    sprintf(input, "%s", s.c_str());

    int j = strlen(input) - 1;
    bool a = true;

    i = 0;
    for (i = 0; i < j; i++)
    {
        if (input[i] != input[j])
        {
            a = false;
        }
        j--;
    }

    if (a)
    {
        cout << input << " is a Valid Palindrome." << endl;
    }
    else
    {
        cout << input << " is not a Valid Palindrome." << endl;
    }

    system("pause");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...