C++字符串读入函数(gets&getline)

对于字符串的读入,我们有scanf和cin这两个最为经典的函数,但是我们发现这两个函数如果遇到空格或换行就结束了。可有时我们希望读到空格时不要结束,读到回车在结束。甚至有时我们希望连遇到空格也不结束,直到遇到一个指定的字符时才结束本次读入。

而cstdio和iostream头文件为了解决这个问题分别提供了两个函数——gets和getline函数。

gets函数

所在头文件:cstdio

gets(ch + begin);

功能:读取字符串存储在ch数组中(第一位存在ch[begin]),直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

返回值:读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。

参数:

  1. char类型数组的首地址(不可以是string类型的) 必要

getline函数

所在头文件:iostream

getline(cin, str, ch);

功能:读取字符串存储在str字符串中(第一位存在ch[begin])。如果有第三个参数直至接受到ch或EOF时停止,否则默认第三个参数为换行符。读取的ch被转换为‘\0’空字符,并由此来结束字符串。

返回值:读入成功时返回读取的字节数,失败返回-1。

参数:

  1. 读入方式(大部分情况下都为cin) 必要
  2. string类型的字符串 必要
  3. char类型的字符 选要

运行实例

备注:gets与getline的本质区别是gets是读入char类型字符数组的,而getline是读入string类型的字符串的。而且getline函数还可以读到你指定的字符结束,而gets只能读到换行符结束。

以下为代码(PS:NR是指数组个数的上限)

# include <cstdio>
# include <stdio.h>
# include <iostream>
# include <cmath>
# include <cstring>
# include <algorithm>
using namespace std;

# define FOR(i, a, b) for(int i = a; i <= b; i++)
# define _FOR(i, a, b) for(int i = a; i >= b; i--)

const int NR = 100;

char ch[NR + 10];
string str;

int main()
{
	cout << "gets:请输入一行字符:" << endl;
	gets(ch);
	cout << ch << endl;
	
	cout << "========================================" << endl;

	cout << "getline:请输入一行字符:" << endl;
	getline(cin, str);
	cout << str << endl;
	
	cout << "========================================" << endl;
	
	cout << "getline:请输入一串字符直到句号出现才结束:" << endl;
	getline(cin, str, '.');
	cout << str << endl;
	return 0;
}

God Bless You For Ever!

发布了33 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/SkeletonKing233/article/details/99672725