字符串就是一串字符的集合,本质上其实是一个“字符的数组”。
在C中为了区分“字符数组”和“字符串”,C语言规定字符串必须用空字符结束,作为标记。
例如:
char str1[5] = {'h', 'e', 'l', 'l', 'o'}; // 不是字符串,是字符数组
char str2[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 字符串
但是这样不方便,因此定义字符串是用双引号
char str3[] = "hello"; // 要不不指定,指定长度5的话会报错,因为最后有一个空字符
cout << sizeof(str3) << endl; //输出是6
建议使用标准库string,少使用C语言的字符数组类型。
标准库中提供了iostream,可以使用内置的cin对象,
特点:忽略开始的空白字符,遇到下一个空白字符就会停止(空格,回车,制表符等),如果输入“hello world”,读取到的就只有hello。注意"world"并没有丢,只是保存在输入流的“输入队列中”,可以使用更多string 对象获取。
string str;
// 读取键盘输入,遇到空白字符停止
cin >> str; //输入:hello world
cout << str << endl; //输出:hello
string str1, str2;
cin >> str1 >> str2; // 输入:hello world
cout << str1 << str2 << endl; //输出:helloworld
//或者可以分开获取
string str3, str4;
cin >> str3; //输入:hello world
cout << str3 << endl; //输出:hello
cin >> str4;
cout << str4 << endl; //输出world
getline函数有两个参数,一个是输入流对象cin, 一个是保存字符串的string对象,他会一直读取输入流中的内容,知道遇到换行符为止,然后把所有的内容保存到string对象中。
string str
getline(cin, str);
cout << str << endl;
char ch;
ch = cin.get(); //只能获取第一个字符
//或者
cin.get(ch)
char str[20];
cin.get(str, 20); //字符数组
cout << str << endl;
C++中提供ifstream 和 ofstream类分别用于文件输入和输出,需要引入头文件fstream。
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
ifstream input("./test.txt"); //读入指的是入计算机
//1.按照单词逐个读取
// string word;
// while(input >> word)
// {
// cout << word << endl;
// }
//读取结束后指针在文件的最后,直接运行下面代码会没有输出,需要将上面的注释掉
//2.逐行读取
// string line;
// while(getline(input, line))
// {
// cout << line << endl;
// }
//3.逐个字符读取
char ch;
while(input.get(ch))
{
cout << ch << endl;
}
}