编程基础——字符/字符串库函数
知识点:
C++把一整行读入:
char str[100];
cin.getline(str,100); //读入字符数组
string str;
getline(cin,str); //读入string容器
1. 求长度
- C语言使用:strlen(字符数组名)
求字符数组长度,或者字符串的元素个数
#include<cstdio>
#include<cstring> //加头文件
int main(){
char str[100];
scanf("%s", str); //录入串至数组,以空格或者换行作为结束
//gets(str); //录入串至数组,以换行作为结束,空格也录入
int len=strlen(str); //strlen(数组名),求出字符数组长度
printf("%d",len);
return 0;
}
输入:abcd abcd e (gets)
输出:4 6
- C++使用:数组名.size()
求string字符串长度,字符串可以按数组来用
#include<iostream>
using namespace std;
int main(){
string str;
cin>>str; //以空格或者换行结束
int len=str.size(); //数字名.size(),求字符串长度
cout<<len;
return 0;
}
2. 字符串比较 strcmp()
- strcmp(字符数组1,字符数组2)按字典顺序比较两字符数组的大小
a>b: 返回一正数
a=b: 返回0
a<b: 返回一负数
#include<iostream>
#include<cstdio> //gets头文件
#include<cstring> //strcmp头文件
using namespace std;
int main(){
char str1[100],str2[100];
gets(str1); //只录入字符串不需要吸收换行符
gets(str2);
int num=strcmp(str1,str2);
cout<<num;
return 0;
}
输入:
abc
ABC
输出:1
- 字符串1.compare(字符串2)按字典顺序比较两string字符串的大小
a>b: 返回一正数
a=b: 返回0
a<b: 返回一负数
#include<iostream>
using namespace std;
int main(){
string str1="bbc";
string str2="ABC";
int num=str1.compare(str2);
cout<<num; //结果为1,str1>str2
return 0;
}
输出:1
3. 字符数组复制strcpy()
strcpy(字符数组1,字符数组2),可以把字符数组2的内容复制到字符数组1中
#include<iostream>
#include<cstdio> //gets头文件
#include<cstring> //strcpy头文件
using namespace std;
int main(){
char str1[100],str2[100];
gets(str1); //只录入字符串不需要吸收换行符
gets(str2); //先录入数字再录入字符数组需要吸收换行符
strcpy(str1,str2);
cout<<str1; //可以直接输出字符数组
return 0;
}
输入:
123
456
输出:
456
4. 字符数组拼接strcat()
strcat(字符数组1,字符数组2)可以将字符数组2的内容放到字符数组1的后面
#include<iostream>
#include<cstdio> //gets头文件
#include<cstring> //strcpy头文件
using namespace std;
int main(){
char str1[100],str2[100];
gets(str1); //只录入字符串不需要吸收换行符
gets(str2); //先录入数字再录入字符数组需要吸收换行符
strcat(str1,str2);
cout<<str1; //可以直接输出字符数组
return 0;
}
输入:
123
456
输出:
123456
5. sscanf()与sprintf()
处理字符串利器
sscanf(str, “%d”, &num): 将str字符数组中的内容以"%d"的格式读入数字num
sprintf(str, “%d”, num): 将数字num以"%d"的格式读入到字符数组中
#include<cstdio>
using namespace std;
int main(){
int num;
char str[100]="123";
sscanf(str, "%d", &num); //把字符数组str内容以"%d"的格式写入num中,从左至右
printf("%d\n",num); //123
int n=456;
char str1[100];
sprintf(str, "%d", n); //把数字n以"%d"的格式写入到str数组中,从右至左
printf("%s",str); //456
return 0;
}
- 可以像使用scanf()与printf()一样进行复杂格式输入输出
#include<cstdio>
using namespace std;
int main(){
int n;
double m;
char str1[100];
char str2[100]="2048:3.14,hello";
sscanf(str2, "%d:%lf,%s", &n,&m,&str1); //sscanf从左向右拆开
printf("%d:%.2f,%s\n", n,m,str1);
int n1=2048;
double m1=3.14;
char str3[100]="hello";
char str4[100];
sprintf(str4, "%d:%.2lf,%s", n1,m1,str3); //sprintf从右向左合起
printf("%s",str4);
return 0;
}
输出:
2048:3.14,hello
2048:3.14,hello