将输入读入 C 风格的字符串
Posted
技术标签:
【中文标题】将输入读入 C 风格的字符串【英文标题】:Reading input into a C-style string 【发布时间】:2014-09-15 20:29:41 【问题描述】:我正在为我的编程课程开发一个项目,该项目需要我使用字符串。该程序首先要求用户输入一个短语。通常我会声明如下内容:
string phrase;
然后我会使用:
getline(cin,phrase);
然而,教授告诉全班我们不允许使用字符串类,我们必须只使用基于 c 的字符串。我可能是错的,但我相信基于 c 的字符串看起来像这样:
char phrase[12] = "hello world";
如果这就是我的教授所说的基于 c 的字符串的意思,那么我不知道如何在其中输入短语。当我尝试这样做时,程序只存储短语的第一个单词并在它看到的第一个空格处停止。例如:
char phrase[12];
cin >> phrase;
//input: hello world
cout << phrase;
//output: hello
任何建议都会有所帮助,我们将不胜感激,谢谢。
【问题讨论】:
你的意思是cin >> phrase;
和cout << phrase;
吗?
提取是用空格分隔的。
@PaulMcKenzie 我想说这取决于课程中的何时。在一定程度上,C++ 开发人员应该能够使用 C 风格的字符串。
@Angew 是的,我只是在编程 2。教授对字符串类并不皱眉,他只是希望我们也能够这样做。
与其使用char phrase[12] = "hello world";
,不如使用char phrase[] = "hello world";
,让编译器调整数组大小。
【参考方案1】:
您需要使用cin.getline(var_id, var_length)
而不是cin >> var_id
,它实际上会在遇到space
或new line
时停止将输入存储在变量中。
如果您想了解更多关于cin.getline
以及使用它会导致什么问题的信息,可以查看这篇文章:Program skips cin.getline()
【讨论】:
好的,谢谢,但是如果我不知道用户将输入什么作为短语,我该如何提出“var_length”? 指定缓冲区/数组长度。在您看来,创建一个足够大的数组。 @BCRwar1var_length
是您可以接受的输入量。允许用户键入少于此值的内容。这是使用固定大小数组而不是 string
类的限制之一。
@Code-Apprentice 我有最后一个问题。程序的下一部分是一个 for 循环,它一次在一个位置运行短语,并在到达短语末尾时停止。示例: for(int k = 0; k
当 i >= length 时结束。如果您希望在输入的短语完成时循环结束,您可以使用以下循环代码:phrase[k] != '\0',因为请记住,任何 c 字符串都是这样,必须以空字符结尾。【参考方案2】:
如果您将输入读入静态字符数组,您可以使用 sizeof(charArray) 来确定其最大长度。但考虑到最后一个符号将是行尾,因此您可以将最大 length-1 个符号读入此数组。
char phrase[12] ;
cin.getline(phrase, sizeof(phrase));
【讨论】:
以上是关于将输入读入 C 风格的字符串的主要内容,如果未能解决你的问题,请参考以下文章