C++ 检查字符串的两端不起作用

C++ 检查字符串的两端不起作用,c++,c++11,C++,C++11,我试着从一根弦的开始到结束。如果单词有大写字母,我们将其改为小写。如果单词有空格或“”我们将删除该字符。第一次递归调用它应该检查字符串的结尾是否有大写字母,并将其更改为小写。但是,当我输出单词[word.size()]时,它输出一个空格,但我输出单词[word.size()-1]< /代码>它将输出我正在寻找的字母。我不知道空白空间是什么,我应该如何处理它,因为我不希望它存在于我的字符串中,因为它造成了比较问题。 bool checkPalindrome(string word){ if (is

我试着从一根弦的开始到结束。如果单词有大写字母,我们将其改为小写。如果单词有空格或
“”
我们将删除该字符。第一次递归调用它应该检查字符串的结尾是否有大写字母,并将其更改为小写。但是,当我输出
单词[word.size()]
时,它输出一个空格,但我输出
单词[word.size()-1]< /代码>它将输出我正在寻找的字母。我不知道空白空间是什么,我应该如何处理它,因为我不希望它存在于我的字符串中,因为它造成了比较问题。

bool checkPalindrome(string word){
if (isupper(word[0]))
{
    word[0] = tolower(word[0]);
}

if (isupper(word[word.size()]))
{
    word[word.size()] = tolower(word[word.size()]);
}

//check if there is a space or "" if there is then delete that position from the string
if (word[0] == ' ' || word[0] == '"')
{
    word.erase(1);
}

if (word[word.size()] == ' ' || word[word.size()] == '"')
{
    word.pop_back();
}

if (word.size() > 1)
{
    if (word[0] == word[word.size()])
    {
        word = word.substr(1, word.size() - 2);
        return checkPalindrome(word, count);
    }
    else
    {
        return false;
    }
}
else
{
    return false;
}
int main()
{

    ifstream inFile;
    bool check = false;
    string temp = "";
    int count = 0;
    vector<string> vect;

    //Reading from a file line by line
    inFile.open("words.txt");
    if (inFile.is_open())
    {
        while (getline(inFile, temp))
        {
            vect.push_back(temp);
        }
    }
    inFile.close();

    for (auto i = 0; i < vect.size(); i++)
    {
        count = vect[i].size();
        check = checkPalindrome(vect[1], count);

        if (check == true)
        {
            cout << vect[i] << ", is a palindrome!\n";
        }
        else
        {
            cout << vect[i] << ", is not a palindrome.\n";
        }
    }
   } return 0;
bool检查回文(字符串字){
if(isupper(字[0]))
{
字[0]=tolower(字[0]);
}
if(isupper(word[word.size()]))
{
单词[word.size()]=tolower(单词[word.size()]);
}
//检查是否有空格或“”如果有,则从字符串中删除该位置
如果(单词[0]=''| |单词[0]=''”)
{
单词删除(1);
}
如果(单词[word.size()
{
单词pop_back();
}
if(word.size()>1)
{
如果(字[0]==字[word.size()])
{
word=word.substr(1,word.size()-2);
返回checkPalindrome(单词、计数);
}
其他的
{
返回false;
}
}
其他的
{
返回false;
}
int main()
{
河流充填;
布尔检查=假;
字符串temp=“”;
整数计数=0;
向量向量;
//逐行读取文件
infle.open(“words.txt”);
if(infle.is_open())
{
while(getline(填充,临时))
{
矢量推回(温度);
}
}
infle.close();
对于(自动i=0;icout如果字符串的大小为4,则只有4个元素:0、1、2和3。没有第五个元素,因此无法访问第四个元素

如果字符串的长度为五:

零是第一个元素。
一个是第二个元素。
二是第三个元素。
三是第四要素

第五个元素当然是Leeloo,它不是字符串中的一个字符。如果字符串的长度为4,则不应尝试访问第五个元素(至少,在没有她的许可的情况下)


Ecto gamat。

如果字符串的大小为4,则只有4个元素:0、1、2和3。没有第五个元素,因此无法访问第四个元素

如果字符串的长度为五:

零是第一个元素。
一个是第二个元素。
二是第三个元素。
三是第四要素

第五个元素当然是Leeloo,它不是字符串中的一个字符。如果字符串的长度为4,则不应尝试访问第五个元素(至少,在没有她的许可的情况下)


Ecto gamat.

请提供一个。在这种情况下,您可以硬编码
words.txt
word[word.size()]
的内容是最后一个字母后的内容。有效索引为
[0到size-1]
。从C++11开始,获取
字符串
开头和结尾字符的最简单方法是使用
front
back
方法。不过,先进行测试以确保字符串不是空的。这是否回答了您的问题?@johnnymop
word[word.size()]
在C++11及更高版本中有效,它返回对字符串的空终止符的引用。请提供一个。在这种情况下,您可以硬编码
words.txt的内容
word[word.size()]
是最后一个字母。有效索引为
[0到size-1]
。从C++11开始,获取
字符串
开头和结尾字符的最简单方法是使用
front
back
方法。不过,先进行测试以确保字符串不是空的。这是否回答了您的问题?@johnnymop
word[word.size()]
在C++11及更高版本中有效,它返回对字符串空终止符的引用。“没有第五个元素,因此您无法访问第四个元素。”-实际上,在C++11及更高版本中,有第五个元素,空终止符,您可以使用
运算符[]合法访问它。
”没有第五个元素,因此您无法访问第四个元素。”-实际上,在C++11及更高版本中,有第五个元素,空终止符,您可以使用
操作符[]
合法地访问它。