C ++:String Compare

时间:2013-11-10 18:43:49

标签: c++ string boolean

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

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

以下是我当前的代码: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”进行测试。

任何提示都将受到赞赏;感谢。

3 个答案:

答案 0 :(得分:3)

宣布

char name1, name2;

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

std::string name1, name2;

答案 1 :(得分:3)

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

所以你应该做

std::string name1, name2;

而不是

char name1, name2;

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

答案 2 :(得分:2)

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

但是,您将name1声明为char - 一个字符。因此,当C ++执行cin >> name1调用时,它正确地意识到它只能存储一个字母,所以它只读取。这意味着name1只是&#39; M&#39;还有剩下的东西还没有被读过。在这种情况下,&#34; ike&#34;。因此,下次需要阅读时,它不需要等待您输入任何其他内容。它只是继续读取你已经填充的缓冲区。