C++字符串操作

头文件:

字符数组(char 类型)

  • 字符数组的输入:char a[100]={}

1.不含空格输入

(1)for循环挨个输入

 for(int i=0;i>a[i];
}

(2)cin>>a

cin>>a[6];
2.含空格输入:
//1. 【a表示数组名,n表示数组长度】
cin.getline(a,n);
//2. 直接gets
gets(a);
  • 字符数组的输出

1.for循环挨个输出

for(int i=0;i

2.cout输出

cout<

字符数组获取长度函数:

strlen(a);

字符数组拼接(stract)函数:(char数组)

stract(a,b)//将b字符串拼接到a字符串后面(a字符串要足够大)

字符数组复制(strcpy)函数:(char数组)

 strcpy(a,b)//将b字符串复制到a,包含'\0'

字符数组比较(strcmp)函数:(char数组)

比较ASCII码值,挨个比较全部一样的是0,比较到出现第一个不相同地时候停下 ASCCI大的是1小的是-1。

0:代表相等

1:代表a字符串大于b字符串

-1:代表a字符串小于b字符串

strcmp(a,b);

字符串(string类型)

字符串的定义(string):

string a;

输入带空格的字符串:

getline(cin,a);

获取字符串的长度:

a.length();
a.size();

获取字符串的首字母:

a.begin() 

字符串的插入:insert()

a.insert(i,b);

获取字符串的末尾:

a.end()

字符串按ASCCI码值排序

sort(a.begin(),a.end());

字符串拼接:

str+=str2;

复制字符串:

str=str2;

字典序排序:(比较大小)

str>str2;

字符串的清零:clear函数

s.clear();

字符串的查找:find函数

用于查找字符串和指定字符,如果找不到则返回值为string::npos(18446744073709551615),若找到了则返回指定字符串在查找字符串中第一次出现的位置

默认从左往右找

string1.find(string2);
 size_t pos = str.find(subStr); // 在str中查找subStr

从右往左找

string1.rfind(string2);

截取字符串substring函数

string substr(int pos=0,int n);
函数说明:

1.pos是必填参数,表示从下标pos开始截取

2.n为截至参数,表示截取的字符串的个数

#include
#include
using namespace std;
int main(){
	string s="ABCD";
    cout<

一些典型的例题 

求字符串的最小周期

#include
using namespace std;
int main(){
	string a;
	while(cin>>a){
		int lena=a.length();
		if(a==".") break;//遇到.则停止循环 
		int flag; //标记是否找到了最小周期 
		for(int i=1;i<=lena;i++){
			flag=0;
			if(lena%i!=0) continue;  
			for(int j=0;j

求字符串的最大跨距

#include  

using namespace std;

int main()
{
    string s, s1, s2, a;
    getline(cin, a);

    int f1, f2;                      // 两个','的位置
    f1 = a.find(',');
    f2 = a.rfind(',');
    s = a.substr(0, f1);
    s1 = a.substr(f1 + 1, f2 - f1 - 1);
    s2 = a.substr(f2 + 1);


    int l, r;
    l = s.find(s1);                   // 在字符串s上从左往右找s1
    r = s.rfind(s2);                  // 在字符串s上从右往左找s2

    if (l == -1 || r == -1)           // s1 或 s2 不在 s 上
    { 
        cout << "-1";
        return 0;
    }

    l = s.find(s1)  + s1.size() - 1;   // l为s1最右面的下标

    if ( l >= r )                      // s1 s2 交叉
        cout << "-1";
    else cout << r - l - 1;

    return 0;
}

字符串的编码与解码

C++字符串操作_第1张图片

C++字符串操作_第2张图片

 【解题思路】利用find函数与暴力

#include
using namespace std;
int sum[27],bsum[27];//记录a,b数组中26个字母是否存在的情况
int main(){
    string a,b,c,d; 
    char aflag=' ',bflag=' '; //如有特殊情况前面已有25个字母存在最后一个字母自动对应则将特殊对应的两个字母存储起来
    cin>>a>>b>>c;
    int x=0;  //x用来标记字符串中存在多少个不同的字母
    d=b; //将字符串b传给字符串d方便之后字符串的变换
    int lena=a.length(),lenc=c.length();
    for(int i=0;i='A'&&a[i]<='Z'){
    		sum[a[i]-65]++;  //将a数组中存在的字母记录到对应的数组中去
		} 
        if(b[i]>='A'&&b[i]<='Z'){
            bsum[b[i]-65]++;//将b数组中存在的字母记录到对应的数组中去
        }
	}
    for(int i=0;i<26;i++){
        if(sum[i]>0) x++;  //统计有多少个存在的不同的字母
    } 
    for(int i=0;i

你可能感兴趣的:(c++,c++,开发语言)