尝试从字符串中删除空格时,s.erase无法正常工作

时间:2019-03-10 05:17:38

标签: c++ visual-c++

我正在尝试从字符串中删除空格以验证回文短语。我已经查找了其他方法,但是我的教授从字面上复制并粘贴了循环中的删除空间,但我无法使其正常工作,他说他不希望我们去互联网寻求帮助。我正在尝试从“太热到不能发声”之类的短语中删除空格以进行验证。我可以让我的程序使用单个单词,例如“ bob”,但不能使用短语。

#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 :(得分:0)

也许您没有从临时变量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;
}
相关问题