参考:
[1]https://www.runoob.com/cplusplus/cpp-strings.html
[2]C++的
https://blog.csdn.net/Sarah_212/article/details/116720933
[3]reverse
reverse-csdn
字符串分为C风格字符串(字符数组)和C++引入的string类型
一.C语言的字符数组
C风格的字符串初始化
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
//或者
char site[] = "RUNOOB";
可以看到最后字符是null 字符,即 ‘\0’ 终止
常用函数:
strcpy(s1, s2);
//复制字符串 s2 到字符串 s1。
strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如:
string str1 = "runoob";
string str2 = "google";
string str = str1 + str2;
strlen(s1);
返回字符串 s1 的长度。
strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;否则返回非零
字符串查找:(略)
strchr(s1, ch);
strstr(s1, s2);
二.C++的string字符串
C++的string类支持上述的所有函数
主要参考2
1.构造函数
//构造函数 (字符串是双引号)
string s1();//默认构造
string s2("hello1");//不要与常量弄混
string s3(4, 'w');
string s4("12345", 1, 3);//带字符串截取的功能
2.初始化(赋值)
//赋值
//拷贝赋值
string s1= "nihao";
//assign 分配函数 与构造类似 构造函数执行后 不能再用assign 但是使用assign后还可以用assign
string s1,s2;
s1.assign("sss");
s2.assign(s1, 1, 2);
s2.assign(4, 'K');
//substr 子字符串
string s1, s2;
s1 = "hahah11";
s2=s1.substr(0, 2);
string的构造函数可以使用以下四个方法进行。
1)创建一个空的字符串
string str;
2)使用一个字符串来初始化
const char*str=“hello world”;
这里使用char来初始化一个字符串,也是根据C++中string对元素维护的方法(如上所述)。加上const说明指针str是常指针。指针指向是不可以发生改变的。
3)使用一个string对象初始化string对象
string s1;
string s2(s1);
此时是调用了拷贝构造函数。
4)使用n个字符c进行初始化
string s1(5,‘s’);
s1=’’‘aaaaa’
索引
//at函数
长度
size
1.字符串的长度获取 (C++方法)
有两种方法,一种是length(),一种是size()
string str1="123";
cout<<str1.length()<<endl;//输出3
cout<<str1.size()<<endl;//输出3
2.字符数组的长度获取(C语言相关)
strlen方法获取实际长度,sizeof获取申明的数组所占字节数
char a[100]={'1','2','3'};
char b[100]={"123"};
char c[100];
cin>>c;//输入123
cout<<strlen(a)<<endl;//输出3
cout<<strlen(b)<<endl;//输出3
cout<<strlen(c)<<endl;//输出3
cout<<sizeof(a)<<endl;//输出100
cout<<sizeof(b)<<endl;//输出100
cout<<sizeof(c)<<endl;//输出100
翻转reverse
可以用来翻转字符串、数组、向量
参考[3]
这里仅仅介绍翻转字符串
//需要引入 #include<algorithm>
string s1("1122334455");
//reverse(s1.begin(), s1.end());//翻转所有
reverse(s1.begin()+1, s1.end()-3);//翻转下标1到后3个之前的部分
三.应用
1.字符串遍历
参考:https://blog.csdn.net/qq_42270373/article/details/84589231
//遍历字符串的三种方法
// (1)类似数组的引用 [] (2)迭代器iterator (3)新式for循环
string s1("1234abcd");
cout << "method 1:";
for(int i = 0; i < s1.size(); i++)
cout << s1[i];
cout << endl;
cout << "method 2:";
string::iterator it = s1.begin();//string类型要写
for (;it!=s1.end(); it++)
cout << *it;//引用的时候*it 引用内容
cout << endl;
cout << "method 3:";
for (auto a:s1)
cout << a;//引用的时候*it 引用内容
cout << endl;