[答疑解惑] 关于如何在 C++ 中获取一行输入字符串的方法

CatIsNotFound 随时更新

简述

在 C++ 中,std:cin 是标准输入流,主要用于等待并获取用户输入的内容,但获取用户输入一行的字符串内容,就不能直接用 cin 来获取。

示例代码:输出用户输入的字符串

假如用户输入了一行内容中包含空格或者制表符 Tab 等空白字符的字符串,空白字符及后面的所有部分会被忽略,导致只能输出空白字符前的字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;

int main() {
char line[64];
cin >> line;
cout << line << endl;
return 0;
}

// 输入样例:
// Hello world!
// 输出样例:
// Hello

解决方法

1、利用 string 中的 getline() 方法

可以将需要获取的变量类型从 char 改为 string 类型,并使用 getline() 方法以获取行内的内容。

使用方法:getline()

  • 其函数定义于 <string> 头文件中,其函数原型如下:(只提其中一种使用方法)

    1
    istream& getline( istream& is, string& str );
  • 其中的参数含义如下:

    • is:输入流对象。可以是 cinfstreamistream 类型的指针等。
    • str:用于存储读取的字符串。

因此,根据此方法,可以这么写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
using namespace std;

int main() {
string line;
getline(cin, line);
cout << line << endl;
return 0;
}

// 输入样例:
// Hello world!
// 输出样例:
// Hello world!

附加:getline() 与 gets()

2、利用 cin.getline() 方式

1
cin.getline(char_type* __s, streamsize __n)

对应的参数如下:

  • __s:选定一个字符串对象;
  • __n:限制的字符个数,其区间范围为 [0, n)

针对 C 语言风格,如果要将用户输入的内容赋值给 char 类型的字符串数组,可以这么写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;

int main() {
char line[64];
cin.getline(line, sizeof(line));
cout << line << endl;
return 0;
}

// 输入样例:
// Hello world!
// 输出样例:
// Hello world!

参考链接

  • 标题: [答疑解惑] 关于如何在 C++ 中获取一行输入字符串的方法
  • 作者: CatIsNotFound
  • 创建于 : 2024-12-04 14:14:10
  • 更新于 : 2024-12-04 15:23:10
  • 链接: https://catisnotfound.github.io/2024/12/答疑解惑-关于如何在-C-中获取一行输入字符串的方法/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
[答疑解惑] 关于如何在 C++ 中获取一行输入字符串的方法