添加两个单词的长度会产生错误的答案(string0.length()+ string1.length())

时间:2017-09-08 11:15:03

标签: c++ string

#include <iostream>

using std::cout;
using std::cin;
using std::string;

int main(){
    cout << "Welcome to the program!";
    cout << "\nWhat is your name? ";
    string name;
    cin >> name;
    cout << "Hi, " << name << ". ";
    cout << "Your name has " << name.length() << " letters!";
    cout << "\nWhat is your last name? ";
    string lastname;
    string *plastname;
    cin >> lastname;
    plastname = &lastname;
    cout << "Your full name is " << name.append(*plastname) << ".";
    cout << " Your full name has " << name.length() + lastname.length() << " letters!";
    return 0;
}

这就是结果:

  • 欢迎来到该计划!
  • 你叫什么名字? ADK
  • 嗨,adk。你的名字有3个字母!
  • 你的姓氏是什么? adkl
  • 您的全名是adkadkl。您的全名有11个字母!

3 + 4 = 11怎么样?!

3 个答案:

答案 0 :(得分:3)

首先,name.append(*plastname)真正将lastname添加到name,使name成为长度为7的字符串(使用您的示例输入)。

然后你打印name.length() + lastname.length()等于7 + 4(记住你之前的追加!),导致11的结果。

或许附加namelastname,您应该单独打印它们吗?像

cout << "Your full name is " << name << ' ' << lastname << ".\n";

答案 1 :(得分:1)

您已将lastname附加到name,然后添加它们,这会给您带来比预期更大的价值

cout << "Your full name is " << name.append(*plastname) << ".";//You append here
cout << " Your full name has " << name.length() + lastname.length() << " letters!";//And then add here

答案 2 :(得分:1)

你只需打印name.length()的name.length()+ lastname.lenght(),因为你已将姓氏附加到名称。