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

Posted

技术标签:

【中文标题】如何将字符串与包含空格的短语一起使用 [关闭]【英文标题】:How to use string with phrases that contain spaces [closed] 【发布时间】:2017-01-31 22:33:42 【问题描述】:

我在 cin.ignore() 之后使用了 cin.getline,但我收到一条错误消息,说 unassigned int... 不知道该怎么做或出了什么问题。有什么建议吗?

这是我的代码:

 #include <iostream>
 #include <string>
 #include <cstring>

 using namespace std;


 int main()
 
     string phras;
     cout << " Provide a phrase, up to 30 characters with spaces > " << endl;
     cin.ignore();
     cin.getline(phras, sizeof(phras));
     cout << " The phrase is: " << phras << endl;
     cout << endl;


     return 0;
 

更新 我改变了 cin.getline(phras, sizeof(phras)); 到 getline(cin,phras) 问题解决了!感谢大家的帮助!

【问题讨论】:

你为什么把代码放在你不想让我们评论的问题中?如果不相关,请忽略它。 &gt;&gt; 捕获单个字符的操作将在 cin 缓冲区中留下一个换行符。您可以使用cin.ignore() 将其删除。 @paulRooney 所以我应该在 cin >> 字母之前还是之后写?很抱歉澄清问题。我只是想确保我做对了!顺便谢谢你。 cin &gt;&gt; letter; 之后但在cin.getline(word, sizeof(word)); 之前。如果您在该点输入多个字符,它仍然会搞砸。 如果有人看这里作为参考,这行得通^^^。添加 cin.ignore() 【参考方案1】:

问题是

char letter[1];

不够大。如果 C 字符串最多可容纳 N 字符,则需要将其声明为 char letter[N+1] 以便为空终止符留出空间。因此,如果用户要输入单个字符,则需要:

char letter[2];

因此,当cin &gt;&gt; letter 将 2 个字符写入只有 1 个空间的数组时,您会遇到未定义的行为。

同样,如果允许用户输入 10 个字母的单词,则应该是:

char word[11];

它应该是:

char phrase[31];

【讨论】:

第一个应该只包含一个字母...如果您在此之前阅读了声明,它说输入一个字符.. @KatieStevers 编译器仍将 char letter[1]; 视为数组类型。也许你打算char letter; @KatieStevers 因为它是一个 C 字符串,你仍然需要 2 个元素来保存 1 个字母。一个用于字母,一个用于空终止符。 Bammar,'0' 是你开始计数的地方,而不是 '1'。所以不,1是正确的。我刚刚在“>>>>从控制结构到对象的 C++ 开始”一书中读到了这篇文章。 但是,您确实为空终止符 '\0' 或其他任何内容添加了一个额外的空间。所以它最终会影响事情。

以上是关于如何将字符串与包含空格的短语一起使用 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]

字符串短语以空格结尾?

Elasticsearch上的短语和通配符查询

当列名包含特殊字符时,如何将 Convert 函数与 RowFilter/CustomFilter 一起使用?

删除重复的短语[关闭]

文本分类,如何将文本字符串转换为向量表示