字符串短语以空格结尾?

Posted

技术标签:

【中文标题】字符串短语以空格结尾?【英文标题】:String phrase ends at space? 【发布时间】:2016-11-07 05:10:09 【问题描述】:

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

#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;
   

【问题讨论】:

它对我有用。您确定看不到所需的输出吗? 是的。也许我的编译器没有它需要做字符串的文件。请您张贴您的输出照片。 在我的编译器中,字符串甚至不会亮起另一种颜色。如果它工作正常,不是吗? 术语警告:您将编译器与文本编辑器混淆。编辑器显示并允许您编辑源代码。编译器将源代码转换为目标代码(链接器将目标代码转换为可执行程序)。编译器不会让文字亮起来;如果您正确编写了源代码,它只会向您显示一条漂亮的“全部完成”类型的消息。 啊,明白了!谢谢你告诉我,因为我一直在想。 【参考方案1】:

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

这是有道理的。

cin >> phrase;

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

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

    两次调用cin &gt;&gt;

    std::string first_name;
    std::string last_name;
    cin >> first_name >> last_name;
    

    使用getline 读取整行。 getline 将读取一行中的所有内容,包括空白字符。

    getline(cin, phrase);
    

【讨论】:

谢谢。我想也许是这样!【参考方案2】:

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

重要提示:getline() 将读取流缓冲区中的任何内容,直到第一个 \n。这意味着当您输入cin &gt;&gt; greeting; 时,如果您按ENTER,getline() 将读取\n 之前尚未读取的所有内容,这在您的phrase 变量中没有任何内容,使其成为一个空字符串。一个简单的方法是拨打getline() 两次。例如

#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;
  

假设您将该代码存储在文件 ***.cpp 中。示例运行:

Chip Chip@04:26:00:~ >>>  g++ ***.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 上测试

【讨论】:

以上是关于字符串短语以空格结尾?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式捕获字符后的文本并以空格​​结尾[重复]

如何将字符串与包含空格的短语一起使用 [关闭]

在文本块中查找单词/短语中字符的百分比

Linux shell提取字符串,文件中以a开头以z结尾的所有字符串

修剪功能将内存大小减半以删除空格?

正则表达式:指定“空格或字符串开头”和“空格或字符串结尾”