目录
第一种:string类型的字符串,使用scanf输入报警告且输出乱码。即:string不能用scanf赋值
(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;
}