【问题标题】:C++: String CompareC++:字符串比较
【发布时间】:2013-11-22 11:59:49
【问题描述】:

我目前对为什么我的程序没有按应有的方式执行感到困惑。每当我运行它时,它只执行第一个 cout & cin 语句并完全绕过第二个语句。程序需要请求两个名称并将它们存储在字符串对象中。

然后它应该报告它们是否相同,忽略大小写(如测试名称“jack”是否与“JACK”相同,它将显示名称相同,忽略小写的差异) /大写字母。)该问题提供了程序所需的两个标题,因此您将在初学者中看到布尔和字符串标题。

这是我当前的代码:http://pastebin.com/Ju0MjkfP

#include <iostream>
using namespace std;

string upperCaseIt(string s);
bool sameString (string s1, string s2);

int main ()
{
    char name1, name2;

    cout << "Enter a name: ";
    cin >> name1;

    cout << "Enter another name and I will test if they are the same.";
    cin >> name2;

    if (name1==name2)
       cout << name1 << " is the same as " << name2 << endl;

    if (name1!=name2)
        cout << name1 << " is not the same as " << name2 << endl;

    system ("pause");
    return 0;
}
bool sameString (char name1)
{
     if (name1)
        return true;
     else
         return false;
}

编辑:我输入了“jack”和“JACK”来测试它。

任何提示将不胜感激;谢谢。

【问题讨论】:

  • 对未来问题的说明:请包括您为程序提供的测试输入、它提供的输出以及您期望它提供的内容

标签: c++ string boolean


【解决方案1】:

当你声明时

char name1, name2;

你声明了两个单字符变量。如果你想要一个字符串,你应该使用std::string:

std::string name1, name2;

【讨论】:

    【解决方案2】:

    您应该使用std::string,而不是charchar 变量只能包含一个字符(例如“a”,但不能包含像“Alfred”这样的全名。

    所以你应该这样做

    std::string name1, name2;
    

    而不是

    char name1, name2;
    

    此外,您的 sameString 似乎还不够完整,它只检查您的 name1 变量是否为 != 0

    【讨论】:

      【解决方案3】:

      为了详细说明其他正确答案,它“跳过”第二个 cin 的原因是输入被缓冲。当它要求你输入名字时,你输入几个字符(例如,迈克)。以下行调用 cin 上的operator&gt;&gt; 方法来存储您输入的数据。如果您将name1 声明为std::string,它将读取到换行符,将字符串“Mike”保存在变量中,并丢弃换行符。此时,您键入的每个字符都将被读入,因此缓冲区中没有任何内容。

      但是,您将 name1 声明为 char -- 单个字符。因此,当 C++ 调用 cin &gt;&gt; name1 时,它正确地意识到它只能存储一个字母,所以它读取的就是这些。这意味着name1 只是“M”,还有一些尚未阅读的内容。在这种情况下,“ike”。因此,下次它需要读取某个时间时,它不需要等待您输入任何其他内容。它只是继续从您已经填充的缓冲区中读取。

      【讨论】:

        猜你喜欢
        • 2021-11-19
        • 2016-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多