赞
踩
c风格字符串:在c++中使用字符数组的形式来表示字符串
char text[] = "abcdef";
int len1 = sizeof(text);
int len2 = strlen(text);
cout << "字符串占实际内存大小:" << len1 << endl;
cout << "字符串长度:" << len2 << endl;
其他适用于c语言字符串的函数也适用于c++
string字符串是可变长字符串,一般优先使用它,尽量避免使用c风格字符串。
string是一个类,std::string
#include<cstring>
string s1; //创建一个空字符串对象s1
string s2(s1); //用已有的字符串对象创建新的字符串对象s2
string s3(text); //用c风格字符串常量创建字符串对象s3
string s4("Hello "); //直接创建s4
string s5(5, 'c'); //用若干个字符创建字符串对象s5
#include<string>
cin >> s1; //遇到空格会停止输入
cout << s1 << endl ;
getline(cin, s1); //getline函数,遇回车才会停止,括号里第一个参数是输入流对象,这里是cin,第二个参数是string字符串
cout << s1 << endl ;
s1 = "China";
s2 = s1; //值赋值,对s2做处理不会影响s1
s1.assign("CHINA");
s2.assign(s1);
string s4("Hello ");
cout << s4[0] << s4.at(3) << endl;
int len = s1.size(); //或者int len = s1.length()
cout << len << endl;
max_size函数返回一个字符串最多能够包含的字符数,不同计算机、操作系统、编译器的结果可能都不同
如果字符串长度超过max_size,会抛出length_error
cout << s1.max_size() << endl;
capacity():字符串重新分配内存空间之前字符串所能包含的最大字符数(在后面创建容器的章节里会很重要),capacity是容量,要与size长度区分开来
reserve(n):为字符串预留存放n个字符的内存空间。
const char* p = s4.data();
for (int i = 0; i < s4.size(); i++) {
cout << *(p + i);
}
const char* q = s4.c_str();
cout << q << endl;
用 + 或者 +=直接连接
运算符+两边至少有一个string字符串,另一个可以是C风格字符串或者char字符
运算符+=左边必须是string字符串,右边可以是string字符串、C风格字符串或char字符
s2 = s4 + s1;
cout << s2 << endl;
s2 += s2;
cout << s2 << endl;
也可以用append函数在原字符串末尾追加字符串
s2.append("!");
cout << s2 << endl;
直接用> 、 < 、 >= 、 <= 、==、!=
会区分大小写
也可以使用compare(str1,str2)函数比较大小,str1>str2则返回正整数,相等返回0,str1<str2返回负数,str1必须是string字符串
删除子串:s1.erase(子串起始位置,子串结束位置)
插入子串:s1.insert(子串插入位置,要插入的子串)
替换子串:s1.replace(要替换子串的起始位置,要替换子串的长度,新子串)
find(要查找的子串或字符,查找的起始位置,查找的字符个数)
find从左至右查找第一个匹配的子串或字符,rfind从右至左查找
找到返回匹配的下标位置,没找到返回string::npos,它的值为1,可以将其强制转换为int
string::size_type index = str.find(" ", 0);
index == string::npos //未找到匹配子串或字符
要包含头文件#include < algorithm >
逆序算法:reverse
reverse(s1.begin(), s1.end()); //逆序算法 begin()返回字符串首字母位置,end()返回字符串最后一个字符的下一个位置,逆序排序是从begin()位置开始到end()位置,但不包括end()位置
reverse(str.begin()+i, str.begin()+j);
从str[i]位置开始到str[j],不包括str[j],进行逆序排序
sort排序算法:
按字典顺序升序进行排序:
sort(s1.begin(), s1.end());
//对s1字符串中的字符进行升序排序
string str[4] = {"Ada","ALOGL","BASIC","JAva"};
sort(str, str + 4);
//对字符串数组进行排序
按字典顺序降序进行排序:
bool cmp(char ch1,char ch2){
return ch1>ch2;
}
sort(s1.begin(), s1.end(),cmp);
//对s1字符串中的字符进行降序排序
bool cmp(string str1, string str2) {
return str1 > str2;
}
string str[4] = {"Ada","ALOGL","BASIC","JAva"};
sort(str, str + 4,cmp);
//对字符串数组进行降序排序
int isdigit(int ch)
isdigit通过判断参数的十进制数是不是在48-57(ascll表里字符0对于48,字符9对应57)来判断它是不是十进制数字字符。
是十进制数字则返回4(本台电脑上是这样),不是返回0
int num = 8;
cout <<"传入int类型num:"<< isdigit(num) << endl;//输出0
char ch = '8';
cout << "传入char类型ch:" << isdigit(ch) << endl;//输出4
cout << "传入char类型‘8’对应的十进制数字56: " << isdigit(56) << endl;//输出4
以下函数同理:
int isxdigit(int ch): 判断读入的字符是否是十六进制数字,是返回128,不是返回0
int isalpha(int ch):判断ch是否为字母
int islower(int ch):判断ch是否为小写字母
int isupper(int ch): 判断ch是否为大写字母
int isalnum(int ch): 判断ch是否为字母或数字
int isspace(int ch): 判断ch是否为空白字符(包括空格,换页符\f,换行符\n,回车符\r,水平制表符\t,垂直制表符\v)
int iscntrl(int ch): 判断ch是否为控制字符(控制字符不可打印)
int isgraph(int ch): 判断ch是否为可打印字符(不包括空格)
int isprint(int ch): 判断ch是否为可打印字符(包括空格)
int ispunct(int ch): 判断ch是否为标点符号(包括除了空格、字母和数字之外的所有可打印字符)
int tolower(int ch):将参数ch中的大写字母转换为小写字母,如果不是字母保持原有值不变
int toupper(int ch):将参数ch中的小写字母转换为大写字母,如果不是字母保持原有值不变
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。