C/C++字符串使用整理

Posted 1807tangjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++字符串使用整理相关的知识,希望对你有一定的参考价值。

首先,为了在我们的程序中使用string类型,我们必须包含头文件 。

 

1 #include<string>

 

然后我们就可以有一些基本操作。

string str:生成空字符串
string s(str):生成字符串为str的复制品,也可以理解为类似于int型的赋初值
string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值
string s(num ,c):生成num个c字符的字符串
string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
 
1     string str1;               //生成空字符串
2     string str2("123456789");  //生成"123456789"的复制品
3     string str3("12345789", 0, 3);//结果为"123"
4     string str4("012345", 5);  //结果为"01234"
5     string str5(5, 0);       //结果为"00000"
6     string str6(str2, 2);      //结果为"3456789"

 

字符串的大小可以用size()或者length()来得出

 

1 int len1,len2;
2 string s;
3 len1 =s.length();
4 len2 =s.size();

当然判断字符串是否为空可以利用empty()也可以利用大小

1 if(s.empty())
2 
3     cout<<"字符串为空"4 
5 
6 
7 if(s.length()<=0)
8 
9    cout<<"字符串为空"

字符串还可以直接使用“+,>,<,==,!=”等符号这里就不说了。

给大家多介绍几种有用的函数吧。

字符串提取

1 str2 = str1.substr(pos1,len1); //获得字符串s中 从第pos1位开始的长度为len1的字符串

字符串查找find()和rfind()

#include<bits/stdc++.h>
#include<string.h>
using namespace std;
int main()
{
 string a="asdsadasdiohokll";
 int where1,where2;
 string flag="asd";
 where1=a.find("asdio");//从前往后找返回第一个字母所在下标
 where2=a.rfind("kll");//从后往前找
 cout<<where1<<endl<<where2;//答案是6和13
 cout<<endl;
 where1 = a.find_first_of(flag);//返回子串出现在母串中的首次出现的位置
 where2 = a.find_last_of(flag);//返回子串出现在母串中的最后一次出现的位置
 cout<<where1<<endl<<where2;//答案是0和8
 return 0;

}

 字符串插入insert()

 1 #include<bits/stdc++.h>
 2 #include<string.h> 
 3 using namespace std;
 4 int main()
 5 {
 6     string a="asdsadasdiohokll";
 7     int where1,where2; 
 8     where1=1;
 9     string b="666";
10     a.insert(where1,b); 
11     cout<<a;//答案为a666sdsadasdiohokll
12     return 0;
13 }

删除字符串erase()和clear()

 1 #include<bits/stdc++.h>
 2 #include<string.h> 
 3 using namespace std;
 4 int main()
 5 {
 6     string a="asdsadasdiohokll";
 7     int where1=1; 
 8     int len=3;
 9     a.erase(where1,len); //从where1位置开始删除len个字符 
10     cout<<a;//答案为 aadasdiohokll
11     cout<<endl;
12     a.clear();
13     if(a.empty())
14        cout<<"a为空串";//输出这个 
15     else
16        cout<<a;
17     return 0;
18 }

交换字符串swap()

 1 #include<bits/stdc++.h>
 2 #include<string.h> 
 3 using namespace std;
 4 int main()
 5 {
 6     string a="asdsadasdiohokll";
 7     string b="666";
 8     cout<<a<<endl<<b;//asdsadasdiohokll 和 666
 9     cout<<endl;
10     swap(a,b);
11     cout<<a<<endl<<b;//666 和  asdsadasdiohokll
12     return 0;
13 }

最后还介绍一个大小写转换的方法吧。

 1 void lower(string& s){
 2     int len=s.size();
 3     for(int i=0;i<len;i++){
 4         if(s[i]>=A&&s[i]<=Z){
 5             s[i]+=32;//+32转换为小写
 6             //s[i]=s[i]-‘A‘+‘a‘;
 7         }
 8     }
 9 }
10 void upper(string& s){
11     int len=s.size();
12     for(int i=0;i<len;i++){
13         if(s[i]>=a&&s[i]<=z){
14             s[i]-=32;//+32转换为小写
15             //s[i]=s[i]-‘a‘+‘A‘;
16         }
17     }
18 }

还有一种偷懒的写法,利用一个algorithm的函数

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     string a="asdsadasdiohokll";
 7     transform(a.begin(),a.end(),a.begin(),::toupper);
 8     cout<<a<<endl;//答案为ASDSADASDIOHOKLL 
 9     transform(a.begin(),a.end(),a.begin(),::tolower);
10     cout<<a;//答案为 asdsadasdiohokll
11     return 0;
12 }

好了,字符串的总结就差不多了,以后发现有意思的用法再补上去吧。

以上是关于C/C++字符串使用整理的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段01

[linux][c/c++]代码片段02

C/C++字符串使用整理

C/C++字符串使用整理

latex在vim中的代码片段

如何正确编组从Unity到C / C ++的字符串?