字符串
博文简述C/C++中常见库函数的操作。
概念
字符串即由char型数组存储一组字符的表达形式,在C++中存在string类型对字符串进行存储与操作。字符串由’\0’作为结束的标志。
输入方法
char str[120] = {0};
1.scanf("%s",str);//采用scanf可使用%s读取一段字符串,字符串读入遇到空白则结尾,自动添加'\0'
2.gets(str);//在C语言中已经废弃的函数,此函数并不安全。
3.//自定义readline函数
int readline(char str[]){
int ch,i = 0;
while((ch = getchar())!='\n'&&ch!=EOF){//读取一行,遇到换行或者文件末尾结束读入
str[i] = ch;
i++;
}
str[i] = '\0';//手动添加'\0',字符串标志
return i;//返回字符串长度
}
//C++ 扩充,
4.getline(std::cin,str);//从cin中读入一行字符串存在str中
5.std::cin>>str;//和scanf类似
输出方法
1.printf("%m.ns",str);//输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
//不加格式控制则完全输出
2.puts(str);
//C++ 扩充
3.cout<<str;
C中字符串函数
字符串间处理
#include<string.h>
char dest[120],src[120],s1[120],s2[120],sub[120],str[120];
char ch;
int n;
1. char* strcpy(dest,src);//将src中字符串复制到dest中
2. char* strncpy(dest,src,n);//将src中字符串前n个字符作为字符串复制到dest中
3. int strlen(str);//返回str字符串长度
4. char* strcat(dest,src);//将src拼接到dest的末尾
5. char* strncat(dest,src,n);//将src的前n个字符拼接到dest末尾
6. int strcmp(s1,s2);//按字典序比较s1,s2的大小(s1>s2),返回值为正数,零,负数。
7. int strncmp(s1,s2);//同strcmp比较s1,s2中前n个字符
8. char* strstr(src,sub);//返回sub在src中第一次出现的地址(指针),没有则返回NULL
9. char* strchr(src,ch);//返回字符ch在src中第一次出现的位置,没有则返回NULL
10. char* strrchr(src,ch);//ch在src中最后一次出现的位置,没有则返回NULL
字符串与数字转化
#include<stdlib.h>
char str[10];
1. int atoi(str);//对于正负+0~9的数字组成的字符串转化为整数,跳过前导空格,非数字结尾
2. double atof(str);//同atoi,返回双进度浮点数
3. long atol(str);//返回长整型数据
字符处理
#include<ctype.h>
1. int isalnum(int c);//检查字符是否为数字或字母(0~9,a~z,A~Z)
2. int isalpha(int c);//检查字符是否为字母(a~z, A~Z)
3. int isdigit(int c);//检查字符是否为十进制数字(0~9)
4. int islower(int c);//检查字符是否为小写的字母(a~z)
5. int ispunct(int c);//检查字符是否为标点符号(~`!@#$%^&*()_+-={}[]:;'“<>,./?\|等)
6. int isspace(int c);//检查字符是否为空白字符(Tab、垂直Tab、换行、换页、回车、空格)
7. int isupper(int c);//检查字符是否为大写字母(A~Z)
8. int isxdigit(int c);//检查字符是否为十六进制数字(0123456789ABCDEFabcdef)
9. int tolower(int c);//转化字符为小写字母
10. int toupper(int c);//转化字符为大写字母
字符串中单个字符可由取下标操作进行随即访问并修改。键盘上能够组合得到的字符均在ASCII编码中。字符串可以存储中文,但编码格式与英文不同。
C++ string内置操作
1.构造函数
string s1();//等价于s1 = ""
string s2("Hello World");//等价于s2 = "Hello World"
string s3(3,'A');//s3 = "AAA"
string s4("ABCD",2,2);//s4 = "CD"
2.长度
int str.length();//返回str长度
int str.size();
int str.capacity();//获取容量,内存大小
3.字符串拼接
string s1,s2;
1. s1+=s2;
2. s1.append(s2);
3. s1 = s1 + s2;
4.判断
string s1,s2;
s1>s2;//>,<,==,<=,>=,!=返回bool型量
s1.empty();//判空
5.查找(查找到则返回首下标,否则返回string::npos,即-1)
int find();//从前往后查找子串或字符出现的位置。
int rfind();//从后往前查找子串或字符出现的位置。
int find_first_of();//查找s1中第一次出现"abc"中任一字符的位置
int find_last_of()//从后往前查找何处出现另一个字符串中包含的字符。
int find_first_not_of()//从前往后查找何处出现另一个字符串中没有包含的字符。
int find_last_not_of()//从后往前查找何处出现另一个字符串中没有包含的字符
6.获取指定位置的子串
string substr(int n = 0, int m = string::npos) const;//函数原型
//n为子串开始的下标,m为长度。
7.替换子串
string replace(int begin,int end,string str);
//begin为被替换字符串中的首下标,end为被替换字节数,替换字符串str可由构造函数进行重载
string s1 = "12345";
string s2 = s1.replace(1,4,"abc");//s2 = "1abc"
8.删除子串[返回自身引用]
string& erase(int begin,int num);//推测
string s1 = "12345",s2 = "abscdsf";
s1.erase(0,3);//s1 = "45"
s2.erase(1);//s1 = "a"
9.插入字符串
string& insert(int index,string str);
//index:插入下标,str插入的字符串(同构造函数重载)
string s1 = "12345";
s1.insert(2,"my");//s1 = "12my345"
10.交换字符串
s1.swap(s2);
11.清除字符串
s1.clear();