C ++空格字符串

时间:2018-10-18 10:05:40

标签: c++

我是C ++的新手。我想知道为什么我的代码无法正常工作。 我有一个名为Response的字符串。 如果响应以y / Y开头,则应继续。但是,当用户也键入“ y” /“ Y”(空白)时,我想继续。 这是我的代码。 预先感谢!

bool AskToPlayAgain()
{
    std::cout << "Would you like to play again? Yes/N";
    std::string Response = "";
    std::getline(std::cin, Response);
    return (Response[0] == 'y') || (Response[0] == 'Y' +) ||(Response[0] == ' y' +) (Response[0] == ' Y' +); 
    std::cout << std::endl;


}

5 个答案:

答案 0 :(得分:1)

使用Response[0],您可以访问字符串的第一个字符。您可以将其与字符常量(例如'y')进行比较。但是,如果要允许前导空格,则不再是单个字符,因此比较Response[0] == ' y'无法正常工作。

这里是一个允许使用任意多个空格字符的版本,然后是y或Y(C ++ 11版本):

for (auto c:Response)
    if (c!=' ')
        return (c=='y') || (c=='Y');

 //string is only spaces
 return false;

答案 1 :(得分:1)

在遍历时,您可以遍历字符串Response并忽略空格(在这种情况下,我正在考虑TabsSpaces)。
如果第一个字符不是空格,那么您可以在这种情况下使用标志yes来中断循环。

bool AskToPlayAgain()
{
    std::cout << "Would you like to play again? Yes/N";
    auto Response="";
    std::getline(std::cin, Response);
    auto yes = false;
    auto itr = Response.begin();
    while(itr != Response.end())
    {
        if(*itr != ' ' && *itr !='\t')
        {
            yes = (*itr == 'y' || *itr =='Y') ;
            break;
        }
        ++itr;
    }
    return yes; 
}

答案 2 :(得分:0)

  

使用循环检查输入字符串中的每个字符...

例如,像这样,可以在所有C ++版本中使用常规循环( 您可以像上述答案中那样使用range based for loop ... ):

TableauPSL

亲切的问候,

Ruks。

答案 3 :(得分:0)

您可以从响应中删除空格,并仅选择'Y'/'y'。

bool AskToPlayAgain()  
{  
    std::cout << "Would you like to play again? Yes/N";  
    std::string Response = "";  
    std::getline(std::cin, Response);  
    Response.erase(remove(Response.begin(), Response.end(), ' '), Response.end()); 
    return (Response[0] == 'y') || (Response[0] == 'Y'); 
}

答案 4 :(得分:0)

也许您可以使用std :: find函数来解决问题。

bool AskToPlayAgain()
{
    std::cout << "Would you like to play again? Yes/N";
    std::string Response = "";
    std::getline(std::cin, Response);
    auto pos1 = Response.find("Y");
    auto pos2 = Response.find("y");
    if (pos1 != std::string::npos || pos2 != std::string::npos)
        return true;
    return false;
}