文章目录
一、字符串(字符数组)
在C语言和C++中字符串的区别
- C语言中字符串是通过字符数组来实现的。
- 在C++中除了通过字符数组来实现,还可以通过string类型来实现。
字符串的规则:
- 字符串是以’\0’结尾的一串字符。
- 字符数组只能在定义并初始化的时候给字符数组赋初值。
- 字符数组之间,不能够直接相互赋值。只能通过每个元素赋值的方式进行。
二、字符的输入
1. cin >> ch;
这个是最基本的输入方式。但是cin>>ch;无法读入空格、回车等。
以Ctrl + z 结束输入。
// 不能读入空格、回车等
#include <iostream>
using namespace std;
int main(){
char ch;
while (cin >> ch){
cout << ch;
}
return 0;
}
// 在循环中,cin从输入缓冲区中一个一个字符读入。
输入:abc def xyz
输出:abcdefxyz
2. cin.get(ch);
这种输入方法,可以读入空格、回车等。
以Ctrl + z 结束输入。
#include <iostream>
using namespace std;
int main(){
char ch;
while (cin.get(ch)){
cout << ch;
}
return 0;
}
输入:abc def xyz
输出:abc def xyz
3. ch = cin.get();
这种输入方法与cin.get(ch)相似,可以读入空格、回车等。
以Ctrl + z 结束输入。
#include <iostream>
using namespace std;
int main(){
char ch;
while (ch = cin.get() != EOF){
cout << ch;
}
return 0;
}
输入:abc def xyz
输出:abc def xyz
4. ch = getchar();
这种输入方法与cin.get(ch)相似,可以读入空格、回车等。
也可以读入Ctrl + z 。
#include <iostream>
using namespace std;
int main(){
char ch;
while (ch = getchar()){
cout << ch;
}
return 0;
}
输入:abc def xyz
输出:abc def xyz
三、字符串的输入
1. cin >> ch;
这个是最基本的输入方式。但是cin>>ch;无法读入空格、回车等,遇到空格、回车会结束读取。
#include <iostream>
using namespace std;
int main(){
char ch[20];
cin >> ch;
cout << ch;
return 0;
}
输入:abc def xyz
输出:abc
2. cin.get(ch, 20, ‘\n’);
可以读入空格、回车等。
三个参数分别是数组名、读入长度(20-1)、终止字符。终止字符默认为’\n’。
如果在读取(20-1)个字符之前,遇到终止字符,则提前结束读取。
#include <iostream>
using namespace std;
int main(){
char ch[20];
cin.get(ch, 20, 'f'); // 读入长度为19
cout << ch;
return 0;
}
输入:abc def xyz
输出:abc de
3. cin.getline(ch, 20, ‘\n’);
可以读入空格、回车等。
cin.getline(ch, 20, ‘\n’)参数与cin.get(ch, 20, ‘\n’)含义相同。
cin.getline() 与 cin.get()的区别
cin.getline()遇到终止字符时结束,缓冲区指针移到终止字符之后。
cin.get()遇到终止字符时,停止读取,缓冲区指针不移动。
当终止字符为’\n’时,cin.getline()会更好,可以防止下次读入时读入换行符。
#include <iostream>
using namespace std;
int main(){
char ch[20];
char str[20];
cout << "cin.getline()的输入:" << endl;
cin.getline(ch, 20, 'f');
cout << "cin.getline()的读入输出:" << endl;
cout << ch;
cin.getline(str, 20, '\n');
cout << str;
cout << endl;
char ch2[20];
char str2[20];
cout << "cin.get()的输入:" << endl;
cin.get(ch2, 20, 'f');
cout << "cin.get()的读入输出:" << endl;
cout << ch2;
cin.get(str2, 20, '\n');
cout << str2;
cout << endl;
return 0;
}
// cin.getline()再次读入的时候,漏掉了终止字符'f'。
两次输入相同:abc def xyz
cin.getline()的输出:abc de xyz
cin.get()的输出:abc def xyz
四、字符数组的输出
// 下面两种方式都可以给字符数组初始化
// 直接用字符串初始化时,会自动在字符串后面加上'\0'
// 传统数组初始化时,没有被初始化的成员默认为'\0'
char ch[10] = "Hello"; // 直接用字符串初始化
char ch[10] = {'H', 'e', 'l', 'l', 'o'}; // 传统数组初始化
// 直接cout字符数组名,就可以输出字符数组
// 这里的cout会输出第一个'\0'之前的内容
// 如果字符数组中没有存储'\0',则会输出其他内容,直到遇到'\0'为止。
cout << ch;
五、cin.get()的三种作用
1. 读入字符cin.get(ch)
这种输入方法,可以读入空格、回车等。
以Ctrl + z 结束输入。
#include <iostream>
using namespace std;
int main(){
char ch;
while (cin.get(ch)){
cout << ch;
}
return 0;
}
输入:abc def xyz
输出:abc def xyz
2. 读入字符串cin.get(ch, 20, ‘\n’)
可以读入空格、回车等。
三个参数分别是数组名、读入长度(20-1)、终止字符。终止字符默认为’\n’。
如果在读取(20-1)个字符之前,遇到终止字符,则提前结束读取。
#include <iostream>
using namespace std;
int main(){
char ch[20];
cin.get(ch, 20, 'f'); // 读入长度为19
cout << ch;
return 0;
}
输入:abc def xyz
输出:abc de
3. cin.get();
cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车。