知识点储备1:问题: 如何将一个字符(char)转化为字符串( string ) ?
答案:直接转化的方法是没有的,只能通过数组来进行间接转化,代码例子如下:
#include
#include
using namespace std;
int main(){
char ch1='a';
char ch2='b';
string s[3] = {ch1,ch2,'\0'}; //在字符数组中末尾加上\0
string s1=s; //字符数组可以直接给string类型赋值
cout< } 知识点储备2:c++中除了string对象必要的那些的操作,还会涉及到处理string对象中的字符(读取或者改变),数字:number 字母:alphabet cctype头文件中定义了一组标准库函数处理这部分工作,下面试主要函数名及其定义: (1)、isalnum(c) 当c为字母(al)或数字时(num)为真; (2)、isalpha(c) 当c为字母(alpha)时为真; (3)、isdigit(c) 当c是数字时为真; (4)、islower(c) 当c是小写字母时为真; (5)、isspace(c) 当c是空白字符时为真; (6)、isupper(c) 当c时大写字母时为真; (7)、tolower(c) 如果c是大写字母,输出对应的小写字母;否则原样输出c; (8)、toupper(c) 如果c是小写字母,输出对应的大写字母;否则原样输出c; (9)、使用范围for语句可以处理字符串中的每个字符 for(auto c: str) cout< 使用范围for语句改变字符串中的字符 for(auto &c:str) c=toupper(c); 只处理string字符串中一部分字符:使用下标(类型为string::size_type)或者迭代器 知识点储备3:c++中一个string类型str和一个字符类型ch,,str+=ch;(即可以将字符串和字符进行相加重新赋值给一个字符串类型) 知识点储备4:一、额外的string操作 大部分操作都是提供string和C风格字符数组之间的转换 (1)、构造string其他方法 string s(cp,n); //s为cp指向的数组中前n个字符的拷贝,注意此数组至少包含n个字符 string s(s1,pos2); //s为string s2从下标pos2开始的字符串拷贝,注意pos2>s2.size(),构造函数未定义 string s(s1,pos1,len1); //s为string s1从下标pos1开始的len1个字符串的拷贝 (2)、灰常重要的一个函数 substr操作 substr:原始字符串一部分或者全部的拷贝 substr(开始位置,计数值),第二个参数可以默认 如果开始位置超过了string大小,则函数会抛出一个out_of_range异常 (3)、将string 变量转化为字符指针型 使用函数 c_str() #include ...... string s="yuhuaihzu"; const char *p= s.c_str();
二、改变string的方法 (1)迭代器版本的insert和erase函数 添加元素: string的str.insert(p,t) 在迭代器p指向的元素之前创建一个值为 t 的元素,返回指向新添加的元素的迭代器 str.insert(p,n,t) 在迭代器p指向的元素之前创建n个值为 t 的元素,返回指向新添加第一个元素的迭代器 str.insert(p,b,e) 在迭代器p指向的元素之 前插入迭代器b和e指定范围内的元素,返回指向新添加第一个元素的迭代器 删除元素: string的str.erase(p) 为删除迭代器p所指定的元素,返回一个指向被删除元素之后元素的迭代器,若p指向尾元素,则返回尾后迭代器,若p是尾后迭代器, 则函数行为未定义; str.erase(b,e) 位删除迭代器b和e所指定范围内的元素,返回一个指向最后一个被删除元素之后元素的迭代器; (2)下标版本的insert和erase函数 添加元素: string的str.insert(pos,args) 在pos之前插入args指定的字符,pos为下标;除了这个形式,还有各种省略参数,或者加一些别的参数,比如, balabala 删除元素: string的str.erase(pos,len)删除从pos开始的len个字符,如果len省略,则删除Pos位置开始到结尾 (3)append和replace、assign函数 s.assign(args) 将s中的字符串替换为args指定的字符,返回一个指向s的引用; s.append(args) 将args追加到s中,返回一个指向s的引用; s.replace(range,args) 删除s中range范围内的元素,替换为args中的字符,返回一个指向s的引用 注: range为一个下标,或者一对指向迭代器范围; args可以为下列形式: str 字符串str str,pos,len str从pos开始最多len个字符 cp,len 字符数组前len个字符 cp cp指向以空字符结尾的字符数组 n,c n个字符c b,e 迭代器b和e指定的范围内的字符 (4)string搜索操作 (5)数值转换 有两个非常重要的函数 atoi 将字符串转换成整数 使用函数atoi必须要注意,它的形参为字符指针形,比如string s; int num =atoi(s.c_str()); 这样才是正确的 to_string 将整数转换为字符串 三、 1、注意:寻找字符串中的某个字符,和寻找容器中的某个值,find函数的形参是不一样的 (1)寻找某个字符在字符串中的位置 如果找到,返回下标,否则返回-1 const string helper1 = "0123456789abcdefABCDEF"; string str="abcdef"; for(int i=0;i (2)寻找某个值在容器中第一个该值所在的位置 vector int num=8; auto b= result.find(reslut.begin(),result.end(),num); //寻找值num在容器result中的位置,返回迭代器,若容器中不存在该值,则会返回尾后迭代器reslut.end() if(b==reslut.end()) //说明容器中不存在该值 else //容器存在该值
2、关于标准输入输出流的使用,sstream string line,str; while(getline(cin,line)){ istringstream str_read(line); while(str_read>>str){ cout< } cout< } 3、华为字符加密这道题目,使用find函数,找到返回字符位置,未找到返回-1 关于replace函数的使用 str.replace(start_pos,len,s) start_pos为起始位置,len为要替换的长度,s为要替代的字符串, 举例: string s="abcdefghijklm"; string str=yuhuai ; s.replace(0,str.size(),str); cout< 4、
const string helper2 = "084C2A6E195D3B7F5D3B7F";
if(n != -1)
str[i] = helper2[n];
}