C++中的字符串输入

本文介绍了C++中处理用户输入的几种方法,包括原始cin、cin.get(char)、cin.get(*char,int)和cin.getline()。通过示例展示了它们在处理空格和字符串时的区别。cin会忽略空格且按回车读取,cin.get()能读取空格但不处理行结束符,cin.getline()则会读取行结束符。此外,还提到了使用string类输入字符串的情况。
摘要由CSDN通过智能技术生成

1. 原始cin输入字符

如果程序要使用循环输入来自键盘的文本,则必须设置哨兵字符作为停止标记。

#include <iostream>
using namespace std;
int main() {
	char c;
	int count = 0;
	cout << "Enter characters; enter # to quit:\n";
	cin >> c;
	while (c != '#') {
		cout << c;
		count++;
		cin >> c;
	}
	cout << endl;
	cout << count << " characters read\n";
	return 0;
}

下面是该程序的运行情况:
Enter characters; enter # to quit:
I love china#
Ilovechina
10 characters read
这说明cin将忽略空格和换行符,因此输入中的空格没有回显,也没有被包括在计数内。更为复杂的是,发送给cin的输入被缓冲,这意味着只有用户按下回车键后,输入的内容才被发送给程序。(没有输入一个字符,随即输出一个字符),为了正确读取字符串中的空格,可以采用cin.get(char)函数

2. cin.get(char)输入字符

成员函数cin.get(char)读取输入中的每一个字符(即使是空格),并将其赋值给c。

#include <iostream>
using namespace std;
int main() {
	char c;
	int count = 0;
	cout << "Enter characters; enter # to quit:\n";
	cin.get(c);
	while (c != '#') {
		cout << c;
		count++;
		cin.get(c);
	}
	cout << endl;
	cout << count << " characters read\n";
	return 0;
}

下面是该程序的运行情况:
Enter characters; enter # to quit:
I love china#
I love china
12 characters read
对于上述两种输入方式都是单字符输入,有时为了输入字符串也可以利用cin方法

3. 原始cin输入字符串

#include <iostream>
#include<string>
#define Arsize 20
using namespace std;
int main() {
	char name[Arsize];
	char dessert[Arsize];
	cout << "Enter your name:\n";
	cin >> name;
	cout << "Enter your favorite dessert:\n";
	cin >> dessert;
	cout << "I have some delicious " << dessert;
	cout << " for you, " << name << ".\n";
	return 0;
}

下面是该程序的运行情况:
Enter your name:
Alistair Dreeb
Enter your favorite dessert:
I have some delicious Dreeb for you, Alistair.
从上述结果中可以看到cin输入字符串时,将空格符设置为结束符,导致程序中都无须输入第二个字符串程序就往下运行了,有时为了准确输入含有空格的字符串可以采用cin.get(*char, int)函数

4. cin.get()的重载函数

cin.get()函数还有一个重载的版本接受两个参数:数组名和数组的长度

#include <iostream>
#include<string>
#define Arsize 20
using namespace std;
int main() {
	char name[Arsize];
	char dessert[Arsize];
	cout << "Enter your name:\n";
	cin.get(name, Arsize).get();
	cout << "Enter your favorite dessert:\n";
	cin.get(dessert, Arsize).get();
	cout << "I have some delicious ";
	cout << " for you, " << name << ".\n";
	return 0;
}

下面是该程序的运行情况:
Enter your name:
xiao ming
Enter your favorite dessert:
pizza
I have some delicious pizza for you, xiao ming.
上述程序中函数cin.get(*char, int)可以准确读取含有空格的字符串,但是每行的结束符[回车换行符]依然留在输入流中,为了保证后续的正确读取,需要跳过每行的结束符,其中cin.get(*char, int)的返回值为cin对象为了读取换行符在该函数后直接添加了.get()方法,为读取下一行做准备。

5. cin.getline()函数

#include <iostream>
#include<string>
#define Arsize 20
using namespace std;
int main() {
	char name[Arsize];
	char dessert[Arsize];
	cout << "Enter your name:\n";
	cin.getline(name, Arsize);
	cout << "Enter your favorite dessert:\n";
	cin.getline(dessert, Arsize);
	cout << "I have some delicious " << dessert;
	cout << " for you, " << name << ".\n";
	return 0;
}

下面是该程序的运行情况:
Enter your name:
Mai Parfait
Enter your favorite dessert:
Chocolate Mousse
I have some delicious Chocolate Mousse for you, Mai Parfait.
cin.getline(*char, int)函数含有两个参数,其与cin.get(*char, int)最大的区别就是cin.getline()会读取每行的结束符[回车换行符],而cin.get()不会读取每行的结束符,因此cin.getline()在某些情况下更简洁。

使用string类输入

#include <iostream>
#include<string>
using namespace std;
int main() {
	string name;
	string dessert;
	cout << "Enter your name:\n";
	cin >> name;
	cout << "Enter your favorite dessert:\n";
	cin >> dessert;
	cout << "I have some delicious " << dessert;
	cout << " for you, " << name << ".\n";
	return 0;
}

下面是该程序的运行情况:
Enter your name:
Alistair Dreeb
Enter your favorite dessert:
I have some delicious Dreeb for you, Alistair.
从运行结果可知在输入含有空格的字符串时,用字符数组和string类是一样的效果。为了实现含有空格的输入可以采用getline(cin, string)实现。

上述总结了几种输入方式,便于自己记忆和复习,大部分内容来自于C++ primer plus第六版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值