将输入读入 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 &gt;&gt; phrase;cout &lt;&lt; phrase;吗? 提取是用空格分隔的。 @PaulMcKenzie 我想说这取决于课程中的何时。在一定程度上,C++ 开发人员应该能够使用 C 风格的字符串。 @Angew 是的,我只是在编程 2。教授对字符串类并不皱眉,他只是希望我们也能够这样做。 与其使用char phrase[12] = "hello world";,不如使用char phrase[] = "hello world";,让编译器调整数组大小。 【参考方案1】:

您需要使用cin.getline(var_id, var_length) 而不是cin &gt;&gt; var_id,它实际上会在遇到spacenew line 时停止将输入存储在变量中。

如果您想了解更多关于cin.getline 以及使用它会导致什么问题的信息,可以查看这篇文章:Program skips cin.getline()

【讨论】:

好的,谢谢,但是如果我不知道用户将输入什么作为短语,我该如何提出“var_length”? 指定缓冲区/数组长度。在您看来,创建一个足够大的数组。 @BCRwar1 var_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 风格的字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能用scanf读入一个含有空格的字符串

关于c++文件流读入和写入的问题

c语言中怎样用scanf()读入带空格的字符串

c++第二遍scanf读入问题

c语言 从键盘上读入一个整型数,将其转化成字符串并输出。例如:输入123,则转换为字符串“123

C printf