字符串短语在空格结束?

时间:2016-11-07 05:10:09

标签: c++ string c-strings

我正在拧一个简单的代码来了解有关字符串的更多信息。当我运行我的代码时,它不会打印我的姓氏。有人可以解释原因吗?我使用字符串短语来存储它,它似乎只存储了我的名字。这是代码。

#include <iostream>
#include <string>
#include <cstring>
using namespace std; 

int main()
{
    cout << "Exercise 3B" << endl;
    cout << "Kaitlin Stevers" << endl;
    cout << "String arrays" << endl;
    cout << endl;
    cout << endl;
    char greeting[26];
    cout << "Please enter a greeting: " << endl;
    cin >> greeting;
    cout << "The greeting you entered was: " << greeting << endl;
    string phrase;
    cout << "Enter your full name " << endl;
    cin >> phrase;
    cout << greeting << ", how are you today " << phrase << "?" << endl;
    return 0;
}   

2 个答案:

答案 0 :(得分:2)

  

我使用字符串短语来存储它,它似乎只存储了我的名字。

这是有道理的。

cin >> phrase;

在输入中遇到空格字符时将停止读取。

要阅读全名,您可以使用以下方法之一。

  1. 使用两次cin >>来电。

    std::string first_name;
    std::string last_name;
    cin >> first_name >> last_name;
    
  2. 使用getline阅读整行。 getline将读取一行中的所有内容,包括空格字符。

    getline(cin, phrase);
    

答案 1 :(得分:1)

当你致电cin >> phrase;时,它只会读取第一个非空格字符的字符串。如果您想在名称中包含空格,最好使用getline(cin,phrase);

重要提示:getline()将读取流缓冲区中的任何内容,直至第一个\n。这意味着,当您输入cin >> greeting;时,如果您点击ENTER,getline()将会读取尚未读取的\n之前的所有内容,而这些内容并未放入您的phrase变量中,使它成为一个空字符串。一个简单的方法是拨打getline()两次。 E.g。

#include <iostream>
#include <string>
#include <cstring>
using namespace std; 

int main()
{
    cout << "Exercise 3B" << endl;
    cout << "Kaitlin Stevers" << endl;
    cout << "String arrays" << endl;
    cout << endl;
    cout << endl;
    char greeting[26];
    cout << "Please enter a greeting: " << endl;
    cin >> greeting;  //IMPORTANT: THIS ASSUME THAT GREETING IS A SINGLE WORD (NO SPACES)
    cout << "The greeting you entered was: " << greeting << endl;
    string phrase;
    cout << "Enter your full name " << endl;
    string rubbish_to_be_ignored;
    getline(cin,rubbish_to_be_ignored); //this is going to read nothing
    getline(cin, phrase); // read the actual name (first name and all)
    cout << greeting << ", how are you today " << phrase << "?" << endl;
    return 0;
}  

假设您将该代码存储在stackoverflow.cpp文件中。样品运行:

Chip Chip@04:26:00:~ >>>  g++ stackoverflow.cpp -o a.out
Chip Chip@04:26:33:~ >>>  ./a.out
Exercise 3B
Kaitlin Stevers
String arrays


Please enter a greeting: 
Hello  
The greeting you entered was: Hello
Enter your full name 
Kaitlin Stevers
Hello, how are you today Kaitlin Stevers?

在ubuntu 14.04上测试