文章目录

  • C++中常见的几种输入字符串的方法如下:
  • cin >>
  • cin.get()
  • cin.getline()
  • getline()
  • gets()
  • getchar()
  • 输入字符串习题



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++也可以兼容,但是尽量不用或少用;

输入字符串习题

  1. 设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是______。

A) n=0;while((ch=getchar())!=’\n’)n++;
B) n=0;while(getchar()!=’\n’)n++;
C) for(n=0;getchar()!=’\n’;n++);
D) n=0;for(ch=getchar();ch!=’\n’;n++);

正确答案:

D

答案解析:

本题主要考查了while和for循环语句的执行过程。for循环的一般形式如下:
for(表达式1;表达式2;表达式3)循环体
for循环的执行过程如下:
①计算表达式1;
②计算表达式2。若其值为非o,转步骤3;若其值为0,转步骤5;
③执行―次for循环体:
④计算表达式3,转向步骤2:
⑤结束循环。
在选项D中,由于for循环语句末尾直接是分号,没有循环体,因此可以将其看做―条空循环语句,循环体部分可以忽略。程序首先在for循环语句外为变量n赋初值0,在for循环中,先执行表达式“ch=getchar();”,getchar函数用于输入字符,因此程序首先将输入的字符赋值绐变量ch,然后执行表达式“ch!=’\n’;”,判断输入的字符是否为回车,如果此时输入的字符是回车,结束循环,所以D选项错误。