C/C++ 中输入字符串的几种方式练习

目录

第一种:string类型的字符串,使用scanf输入报警告且输出乱码。即:string不能用scanf赋值

第二种:输入时遇到空格,回车,换行符不同输入函数的结果。

(1)字符数组,没有空格,scanf和fgets。

(2)字符数组,有空格,scanf和fgets。

(3)字符数组,没有空格,cin,cin.geline。

(4)字符数组,有空格,cin,cin.geline。

(5)string类型,没有空格,cin,getline,cin.getline。

(6)string类型,有空格,cin,getline,cin.getline。(代码同(5))

(7)string是否和char字符数组一样以'\0'为结束标志呢?我脑子有点混乱


第一种:string类型的字符串,使用scanf输入报警告且输出乱码。即:string不能用scanf赋值

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>
#include <iostream>

using namespace std;

int main() {
	char arr[5];
	string str;
	printf("输入arr:");
	scanf("%s", arr);
	printf("输出arr:%s\n", arr);
	printf("输入str:");
	scanf("%s", str);
	printf("输出str:%s\n", str);
	return 0;
}

第二种:输入时遇到空格,回车,换行符不同输入函数的结果。

(1)字符数组,没有空格,scanf和fgets。
int main() {
	char arr[5];
//	--------1.没有空格--------------
	fgets(arr, 5, stdin);
	printf("fgets输出arr:%s,字符串实际长度:%d\n", arr, strlen(arr));
	scanf("%s", arr);//我打算输入5个字符,会报错
	printf("scanf输出arr:%s,字符串实际长度:%d\n", arr,strlen(arr));
	fgets(arr, 5, stdin);
	printf("第二次fgets输出arr:%s,字符串实际长度:%d\n", arr, strlen(arr));
	return 0;
}

strlen返回的是size_t类型,即无符号整型,需要用%zd(%u)转换成整型, strlen函数找到 \0 时,方会停止计算长度。

scanf()会遇到回车停止,字符串中末位是’\0’。

fgets(字符数组,最大输入位,文件),若为键盘输入,第三个参数则为stdin(标准输入),fgets()遇见‘\n’停止,并实际接收’\n’。

疑问:所以fgets两次输入第一次接收了4个字符,第二次接收了1个字符,这一个字符难道是"\n"吗?那怎么解释第一次只接收了4个字符呢?

(2)字符数组,有空格,scanf和fgets。

遇到空格后scanf就结束了输入,剩下的所有字符直接被fgets接收。

(3)字符数组,没有空格,cin,cin.geline。
int main() {
	char arr[5];
	char arr2[5];
//	--------1.没有空格--------------
	cin >> arr ;
	printf("cin输出arr:%s,字符串实际长度:%d\n", arr, strlen(arr));

	cin.getline(arr, 5);
	printf("cin.getline输出arr:%s,字符串实际长度:%d\n", arr,strlen(arr));

	//getline(cin,arr)不能用来输入字符数组,报错
	return 0;
}

int main() {
	char arr[5];
	char arr2[5];
//	--------1.没有空格--------------
	cin.getline(arr, 5);
	printf("cin.getline输出arr:%s,字符串实际长度:%d\n", arr, strlen(arr));
	cin >> arr ;
	printf("cin输出arr:%s,字符串实际长度:%d\n", arr, strlen(arr));
	//getline(cin,arr)不能用来输入字符数组,报错
	return 0;
}

cin会遇到换行停止。cin.getline()是C++针对字符数组特有的输入方式,cin.getline(字符数组,最大输入位),不会接收‘\n’。

(4)字符数组,有空格,cin,cin.geline。

cin会遇到空格会停止。cin.geline可以接收空格。

(5)string类型,没有空格,cin,getline,cin.getline。
int main() {
	string str;
	int length = str.length();
	printf("字符串的长度为:%d\n", length);//字符串的长度为:0
	//-------1.没有空格,有换行----------------
	cin >> str;
	printf("cin输出str:%s,字符串实际长度:%d\n", str, str.length());
	getline(cin, str);
	printf("getline输出str:%s,字符串实际长度:%d\n", str, str.length());
	//cin.getline(str, 100);只能用来输入字符数组,否则报错
	return 0;
}

	printf("cin输出str:%s,字符串实际长度:%d\n", str.c_str(), str.length());
	
	printf("getline输出str:%s,字符串实际长度:%d\n", str.c_str(), str.length());

int main() {
	string str;
	int length = str.length();
	printf("字符串的长度为:%d\n", length);//字符串的长度为:0
	//-------1.没有空格,有换行----------------
	getline(cin, str);
	printf("getline输出str:%s,字符串实际长度:%d\n", str.c_str(), str.length());
	cin >> str;
	printf("cin输出str:%s,字符串实际长度:%d\n", str.c_str(), str.length());

	//cin.getline(str, 100);只能用来输入字符数组,否则报错
	return 0;
}

(6)string类型,有空格,cin,getline,cin.getline。(代码同(5))

(7)string是否和char字符数组一样以'\0'为结束标志呢?我脑子有点混乱
int main() {
	string str="";
	printf("str的长度为:%d\n", str.length());//str的长度为:0
	
	//string str1 = '\0';
	//printf("str1的长度为:%d\n", str1.length());//报错
	string str2 = "\0";
	printf("str2的长度为:%d\n", str2.length());//str2的长度为:0
	string str3 = " ";
	printf("str3的长度为:%d\n", str3.length());//str3的长度为:1
	string str4 = "\n";
	printf("str4的长度为:%d\n", str4.length());//str4的长度为:1
	return 0;
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值