0%

【总结】字符串处理总结

  • 主要内容:
    • 总结各类模拟题型中的一些字符串处理

Tips

C语言里压根就没有string这个类,所以字符串都是通过char数组来存储的,而这个头文件里声明的函数原型也全是针对char数组的种种操作。直到C++中才出现了string这个类(注意是类,不是类型)

大小写转换

1
2
3
4
char 大写字母 = 小写字母-'a'+'A';
char 大写字母 = toupper(小写字母);
//cout<<(char)toupper(c[i])直接cout要类型转换,因为toupper返回的时int的ascii
char 小写字母 = tolower(大写字母);

string char[] int 之间的相互转换

string 转 char[]

1
2
3
string s;
char a[100];
a=s.c_str(); //string转char数组

string 转 int

1
2
3
4
5
6
7
8
string s="123";
//方式一
int a=stoi(s); //output:123
//同理还有:
//stoll():转换成long long
//stod():转换成double;stof():转换成floay
//方式二:
int a=atoi(s.c_str());

char[] 转 string

1
2
3
char ch[]="abc";
//方式一
string s=ch

char[] 转 int

1
2
char ch[]="124";
int a=atoi(ch);

int 转 string

1
2
int a=123;
string s=to_string(a);

int 转 char[]

1
2
3
4
int number =123;
char s[10];
itoa(number, s, 10);//将number转换成十进制存在s数组中
cout<<s<<endl;
1
2
3
4
int number =123;
char s[10];
sprintf(s,"%d",number);//将number转换成十进制存在s数组中
cout<<s<<endl;

字符串读取

getline(cin,string_namae,end_char)读取一行

接受一个字符串,可以接受空格并输出

1
2
3
4
5
string str; 
getline(cin,str); //输入:ss ss ss
cout<<str<<endl; //输出:ss ss ss

getline(cin,str,'a');//一个直到‘a’结束,其中任何字符包括'\n'都能够读入

当同时使用cin>>getline(cin,str)的时候,在cin>>输入完成之后,getline(cin,str)(str是真正想要的串)之前,需要getline(cin,str)(这个str是一个打算用来存储换行符的串);将换行从输入流缓存中清除

1
2
3
4
5
int n;
string line;
cin>>n;
getline(cin,line); //清除缓存的换行!!!!!!!!!!!!!!!!!
getline(cin,line);

gets(char*)读取一行

1
2
3
char t[100];
gets(t);
puts(t);

STL string常用方法

截取

1
2
3
4
string line="abcdefg";
int st=3,len=2;
string s1=substr(line,st,len);
//从line的st位置开始,截取len长度的字符串

查找

1
2
3
4
int idx= line.find("cde");//查得到则返回第一个下标,
//找不到会返回一个诡异的数字(反正比字符串长)

int idx=line.find("cde",2);//从第index=2的位置往后找

插入

1
2
3
4
string str="0123456";
string s="aa";
str=s.insert(4,s);//0123aa456
//在str[4]之前插入s

大小写转换

1
2
3
//transform(处理对象容器起始地址,处理对象容器结束地址,存放结果的容器地址,处理操作(可自定义))
transform( str.begin() , str.end() , str.begin() , ::tolower );//化为小写
transform( str.begin() , str.end() , str.begin() , ::toupper );//化为大写

string.h头文件

strlen(char*)

strcmp(char* a, char* b)字典序比较

  • a<b;返回负整数
  • a==b;返回0
  • a>b;返回正整数

strcpy(char* a ,char* b)把a复制给b

strcat(char* a ,char* b)把b接到a后面

sscanf和sprintf

scanf(char* , "" ,&)

1
2
3
4
5
char t[100]; gets(t);int a;
sscanf(t,"%d",a);//把t以整型格式输入到a中
sscanf(t,"%d:%lf,%s",&n,&db,str);

sprintf(t,"%d",a);//把整型的a输出到字符串t中

字符串的比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
char a[] = "aaa",b[]="aaa";  
string A = "AAA", B = "AAA";
cout <<"*a和*b的值分别是:" <<*a << "," << *b << endl;
cout <<"*“aaa”的值是:"<< *"aaa" << endl;

//错误的比较方法:
cout <<"利用 == 比较a,b两个字符串,结果是(相等为1,不等为0):" <<(a==b) << endl;

//正确的比较方法:
cout << "利用strcmp()比较a,b两个字符串,结果是(相等为0,不等非0):"<<strcmp(a,b) << endl;
cout << "利用 == 比较A,B两个string,结果是(相等为1,不等为0):"<<(A==B) << endl;
cout << "利用compare()比较A,B两个string,结果是(相等为0,不等非0):" << A.compare(B) << endl;

return 0;

int isdigit(char)

isdigit是计算机C(C++)语言中的一个函数,主要用于检查其参数是否为十进制数字字符

1
2
3
4
5
//头文件
#include <ctype.h> //C
#include <cctype> //C++
//检查参数 c 是否为阿拉伯数字0 到9。
//若参数c为阿拉伯数字0~9,则返回非0值,否则返回0。