【发布时间】:2017-03-18 07:22:03
【问题描述】:
我想知道是否可以读取未知大小的字符串,直到空格或到达换行符为止。我在 C++ 中所做的是:
char * dynStr;
char buffer[20];
cin >> buffer;
dynStr = new char[strlen(buffer) +1];
strcpy(dynStr, buffer);
但问题是,如果输入的输入大于 20 怎么办?所以我认为应该是这样的:
do
{
cin.get ( buffer, 20, ' '); //im not sure this is the right approach
strcpy(.....); // if is not a first iteration
//add the new buffer to the end of dyn str..
} while( ! read ' ' or '\n' ) <--- this is what I have problem doing
我知道在 c++ 中我可以使用 std::string ,但我想知道如何做这件事,所以如果你有任何想法,请告诉我:)
【问题讨论】:
-
不仅可以在 C++ 中使用
std::string,而且应该将它用于现代、“自然”的 C++。 -
无论您尝试什么,不要尝试读取单个字符来组装字符串。因为:这两种删除键(以及为这个问题添加一些东西,如果行太长,控制台中的换行符),箭头键,以及许多其他问题。
-
@deviantfan 我不明白你的意思。如果我理解正确,OP 只是想在没有
std::string的情况下重新实现cin >> std::string。 -
@deviantfan 您的评论是关于阅读字符,而不是检测按键。键不是字符。
-
@melpomene 是的,但是如果有人会阅读完整的评论......整个讨论没有任何意义。 ...这是一些人不喜欢某人不想使用 std::string 的问题之一,因此他们开始对每个不推荐 std::string 的人吹毛求疵...典型的 SO。
标签: c++