C++:输入字符串的方式详解


C++中常见的几种输入字符串的方法如下:

cin、cin.get()、cin.getline()、getline()、gets()、getchar()

cin >>

  1. 输入一个数字
#include <iostream>
using namespace std;

int main()	
{
	int a, b;
	cin >> a >> b;	//输入:2[回车]3[回车]
	cout << "a + b = " << a + b << endl;//输出:a + b = 5

	return 0;
}
  1. 接收一个字符串,遇“空格”、“Tab”、“回车”都结束
#include <iostream>
using namespace std;

int main()	
{
	char arr[20];
	cin >> arr;
	cout << "arr: " << arr << endl;
	//输入:jkljkl jkljkl 
	//遇空格结束,所以不能输入多个单词
	//输出:jkljkl
	return 0;
}

cin.get()

  1. cin.get(字符变量名)可用来接收一个字符
#include <iostream>
using namespace std;

int main()	
{
	char ch;
	ch = cin.get();
	//cin.get(ch);
	cout << "ch = " << ch << endl;

	return 0;
}

//输入:jljkljkl
//输出:j
  1. cin.get(字符数组名,接收字符数)可用来接收一行字符串,可接收空格,自动接收一个 ‘\0’
#include <iostream>
using namespace std;

int main()	
{
	char str[20] = { 0 };
	cin.get(str, 20);	//类似于 getline
	cout << "str: " << str << endl;

	return 0;
}
//输入:jkl jkl jkl
//输出:jkl jkl jkl

//输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
//输出:abcdeabcdeabcdeabcd (接收19个字符 + 1个'\0')
  1. cin.get(无参数) 用于舍弃输入流中不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数)的不足
#include <iostream>
using namespace std;

int main()
{
	char str[10] = { 0 };
	cin.get(str, 10);
	cin.get();	//用于吃掉回车,相当于 getchar()
	cout << "str: " << str << endl;

	cin.get(str, 5);
	cout << "str: " << str << endl;

	return 0;
}

//assbdakss
//str: assbdakss
//sdadadsa
//str: sdad

int main()	
{
	char str[20] = { 0 };
	cin.get(str, 20);
	//cin.get();	//用于吃掉回车,相当于 getchar()
	cout << "str: " << str << endl;

	cin.get(str, 5);
	cout << "str: " << str << endl;

	return 0;
}

//hasdjaksasdhaksd
//str: hasdjaksa
//str: sdha

cin.getline()

  1. 接收一个字符串,可以接收空格并输出,自动接收一个 ‘\0’
#include <iostream>
using namespace std;

int main()	
{
	char arr[20] = { 0 };
	cin.getline(arr, 5);
	cout << "arr: "  << arr << endl;

	return 0;
}

//输入:jkljkljkl
//输出:jklj
//接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;

  1. cin.getline()实际有三个参数,cin.getline(接收字符串,接收个数,结束字符)
    当第三个参数缺省时,系统默认是 ‘\n’
#include <iostream>
using namespace std;

int main()	
{
	char arr[10] = { 0 };
	cin.getline(arr, 5, 's');
	cout << "arr: " << arr << endl;

	return 0;
}

//当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk
  1. 当用在多维数组中时,也可以用 cin.getline(arr[i], 10) 这样的用法
#include <iostream>
using namespace std;

int main()	
{
	char arr[3][20] = { 0 };
	for (int i = 0; i < 3; i++)
	{
		cout << "请输入第"<< i + 1 <<"个字符串: " << endl;
		cin.getline(arr[i], 20);
	}
	cout << endl;
	for (int i = 0; i < 3; i++)
	{
		cout << "输出 arr[" << i << "] 的值: " << arr[i] << endl;
	}

	return 0;
}

请输入第1个字符串:
kskr1
请输入第2个字符串:
kskr2
请输入第3个字符串:
kskr3
​
输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3

getline()

接收一个字符串,可以接收空格并输出,需包含头文件 #include <string>

#include <iostream>
using namespace std;

int main()	
{
	string str;
	getline(cin, str);
	cout << "str = " << str << endl;

	return 0;
}

与 cin.getline() 类似,但是 cin.getline() 属于 iostream 流,而 getline() 属于 string 流,是不一样的两个函数

gets()

gets() 接收一个字符串,可以接收空格并输出,需包含 #include <string>

#include <iostream>
#include <string>
using namespace std;

int main()	
{
	char arr[20] = { 0 };
 	gets(arr);		//不能写成 arr = gets()
	cout << arr << endl;

	return 0;
}

但是上面这段代码在 VS 中无法编译通过,我加了 #include <cstdio>#include <stdio.h> 头文件之后还是无法识别 gets() 函数,后来改成 .c 文件测试的,代码如下:

#include <stdio.h>

int main()	
{
	char arr[20] = { 0 };
	gets(arr);		//不能写成 arr = gets()
	printf("arr = %s\n", arr);

	return 0;
}

getchar()

接收一个字符,需包含 #include <string>

#include <iostream>
#include <string>
using namespace std;

int main()	
{
	char ch;
	ch = getchar();	//不能写成 getchar(ch)
	cout << "ch = " << ch << endl;

	return 0;
}

输入:jkljkljkl
输出:j
​
//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;
发布了152 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/AngelDg/article/details/105042844