/**
字符串常量
例:"program"
各字符连续、顺序存放,每个字符占一个字节,以‘\0’结尾,相当于一个隐含创建的字符常量数组
“program”出现在表达式中,表示这一char数组的首地址
首地址可以赋给char常量指针:
const char *STRING1 = "program";
将常量字符串的首地址赋值给常量字符指针,这意味着字符指针所指向的地址中的数据是常量
常量的地址必须由常指针来保存,意味着常指针寻址操作后所指向的内存空间中的数据不能被更改
用字符数组存储字符串(C风格字符串)
C++中存储字符串变量的两种形式:
(1)C风格的字符串:用字符数组存放字符串
char* string_array[8]={'p','r','o','g','r','a','m','\0'}
将字符串中的各个字符依次连续存放在字符数组的各个元素中,末尾添加上 '\0' 即可
C风格的字符串必须以 '\0' 结尾
(2)C++所提供的string模板类
**/
/**
C++中的string类
string类是C++语言标准库中封装起来的字符串
string类常用的构造函数
string(); //默认构造函数,建立一个长度为0的串
例:
string s1;
string(const char *s); //用指针s所指向的字符串常量初始化string对象
例:
string s2 = “abc”;
string(const string& rhs); //复制构造函数
例:
string s3 = s2;
string类常用操作
s + t 将串s和t连接成一个新串
s = t 用t更新s
s == t 判断s与t是否相等
s != t 判断s与t是否不等
s < t 判断s是否小于t(按字典顺序比较)
s <= t 判断s是否小于或等于t (按字典顺序比较)
s > t 判断s是否大于t (按字典顺序比较)
s >= t 判断s是否大于或等于t (按字典顺序比较)
s[i] 访问串中下标为i的字符
在string类中重载了运算符
**/
#include<iostream>
#include<string>
using namespace std;
int main(){
// string s1;//调用string类的默认构造函数,建立一个长度为0的字符串
//
// s1="abc";// c++中 双引号表示字符串,单引号表示字符,用单引号初始化字符串只能使用C风格的字符串
//
// cout<<&s1<<" "<<s1<<endl;
//
// string s2=s1;//调用复制构造函数,将s1的数据成员复制一份给s2
//
// cout<<&s2<<" "<<s2<<endl;// s1和s2具有不同的地址,相同的内容
string s1="abc";
string s2="def";
string s3=s1+s2;//字符串拼接
cout<<s3<<endl;
bool s4=s1>s2;
char s5=s1[1];
cout<<s4<<" "<<s5<<endl;
return 0;
}
用cin的>>操作符输入字符串,会以空格作为分隔符,空格后的内容会在下一回输入时被读取
输入整行字符串
getline可以输入整行字符串(要包string头文件),例如:
getline(cin, s2);
输入字符串时,可以使用其它分隔符作为字符串结束的标志(例如逗号、分号),
将分隔符作为getline的第3个参数即可,例如:
getline(cin, s2, ',');
getlin 的第一个参数表示输入流对象,cin表示从键盘输入
第二个参数表示存放输入流字符串的对象
第三个参数表示输入字符串分隔符,默认为换行符 '\n'