String类及字符串处理

    技术2022-07-10  141

    string初始化方式

    string类有8种初始化方式:

    char temp[]="abcdefghigklmn"; 序号用法输出1string one("Hello Kitty!");Hello Kitty!2string two(3,'$');$$$3string three(one);Hello Kitty!4string four=two+three;$$$Hello Kitty!5string five(five,4);abcd6string six(temp+2,temp+6);cdef7.1string seven1(&six[1]);def7.2string seven2(&six[1],&six[3]);de8string eight(six,1,3);de

    string成员

    查找搜索

    说明,索引(size_type)即第几个字符。如“qwer”中‘e’的索引为2. string str="abcdefg"; string st="cd";

    方法说明str.size()返回字符数str.length()返回字符数string::npos字符串可存储的最大字符数str.find("cd",1)从str的第2个位置开始查找字符串cdstr.find(st,1)从str的第2个位置开始查找字符串ststr.find("cd",1,4)从str的第2个位置开始到第5个位置查找字符串cdstr.find(st,1,4)从str的第2个位置开始到第5个位置查找字符串st

    字符访问

    命令功能string::at–访问特定字符,带边界检查string::operator[]–访问特定字符string::front–访问第一个字符string::back–访问最后一个字符string::data–访问基础数组,C++11 后与 c_str() 完全相同string::c_str–返回对应于字符串内容的 C 风格零结尾的只读字符串string::substr–以子串构造一个新串;参数为空时取全部源串

    迭代器

    命令功能string::begin–获得指向开始位置的迭代器string::end–获得指向末尾的迭代器string::rbegin–获得指向末尾的逆向迭代器string::rend–获得指向开始位置的逆向迭代器string::cbegin–获得指向开始位置的只读迭代器string::cend–获得指向末尾的只读迭代器string::crbegin–获得指向末尾的逆向只读迭代器string::crend–获得指向开始位置的逆向只读迭代器

    容量

    命令功能string::empty–检查是否为空string::size–返回数据的字符长度string::length–返回数据的字符长度,与 size() 完全相同string::max_size–返回可存储的最大的字节容量,在 32 位 Windows 上大概为 43 亿字节。string::reserve–改变 string 的字符存储容量,实际获得的存储容量不小于 reserve 的参数值。string::capacity–返回当前的字符存储容量string::shrink_to_fit(C++11 新增)–降低内存容量到刚好

    修改器

    命令功能string::clear–清空内容string::insert–插入字符或字符串。如果参数仅为一个迭代器,则在其所指位置插入0 值。string::erase–删除 1 个或 1 段字符string::push_back–追加 1 个字符string::pop_back–删除最后 1 个字符,C++11 标准引入string::append–追加字符或字符串string::operator+=–追加,只有一个参数——字符指针、字符或字符串。string::copy–拷贝出一段字符到 C 风格字符数组;有溢出危险string::resize–改变(增加或减少)字符串长度;如果增加了字符串长度,新字符缺省为 0 值string::swap–与另一个 string 交换内容string::replace–替换子串;如果替换源数据与被替换数据的长度不等,则结果字符串的长度发生改变

    搜索

    命令功能string::find–前向搜索特定子串的第一次出现string::rfind–从尾部开始,后向搜索特定子串的第一次出现string::find_first_of–搜索指定字符集合中任意字符在 *this 中的第一次出现string::find_last_of–搜索指定字符集合中任意字符在 *this 中的最后一次出现string::find_first_not_of–*this 中的不属于指定字符集合的首个字符string::find_last_not_of–*this 中的不属于指定字符集合的末个字符string::compare–与参数字符串比较

    例程:将字符串转化为数字

    #include <iostream> #include <string> int main() { std::string date = "2019-09-27"; int stringToNum = atoi((date.substr(0, 4)).c_str()); std::cout << "the number is:"<<stringToNum << std::endl; return 0; }

    substr()是取字符串的部分字符; c_str()接口是string类的一个函数,返回的是字符串的首地址,返回值类型是const char *。如果要使用它并对其进行赋值操作,必须要使用strcpy函数.如果哦直接进行赋值,是不会赋值成功的; atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数。

    最大长度

    string类的最大长度为unsigned int的最大值;

    字符串转数值

    #include <string> string方法作用stoi(s,p,b)把字符串s从p开始转换成b进制的intstol(s,p,b)把字符串s从p开始转换成b进制的longstoul(s,p,b)把字符串s从p开始转换成b进制的unsigned longstoll(s,p,b)把字符串s从p开始转换成b进制的long longstoull(s,p,b)把字符串s从p开始转换成b进制的unsigned long longstof(s,p)把字符串s从p开始转换成floatstod(s,p)把字符串s从p开始转换成doublestold(s,p)l把字符串s从p开始转换成long double #include <stdlib.h> c标准库方法作用atof(s)将字符串s[n]转换为双精度浮点型值。atoi(s)将字符串s[n]转换为整型值。atol(s)将字符串s[n]转换为长整型值。strtod(s,*p,b)将字符串s[n]转换为b进制双精度浮点型值,到p停止,并报告不能被转换的所有剩余数字。strtol(s,*p,b)将字符串s[n]转换为b进制长整值,到p停止,并报告不能被转换的所有剩余数字。strtoul(s,*p,b)将字符串s[n]转换为b进制无符号长整型值,到p停止,并报告不能被转换的所有剩余数字。

    数值转化为字符串

    #include <string> using std::to_string; string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val);

    进制转换

    strtol()函数

    任意进制转换为10进制。 base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符。

    #include<cstdio> int main() { char buffer[20]="10549stend#12"; char *stop; int ans=strtol(buffer, &stop, 8);   //将八进制数1054转成十进制,后面均为非法字符 printf("%d\n",ans); printf("%s\n", stop); return 0; } 556 9stend#12

    itoa()函数

    将一个10进制数转换为任意的2-36进制字符串。 num是一个int型的,是要转化的10进制数,str是转化结果,后面的值为目标进制。

    #include<cstdio> #include<cstdlib> int main() {     int num = 10;     char str[100];     _itoa(num, str, 2); //c++中一般用_itoa,用itoa也行,     printf("%s\n", str);     return 0; }

    读取字符串的三种姿势

    cin

    cin>>该输入操作符是根据后面变量的类型读取数据。输入结束条件 :遇到Enter、Space、Tab键。(这个很重要!)对结束符的处理 :当第一个字符为分隔符时丢弃缓冲区中的结束符,当还存在其他cin输入时,会输出下一个非结束符字符串数据。

    重要:当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

    cin.get()

    该函数有三种格式:无参,一参数,二参数即cin.get(),cin.get(char ch), cin.get(array_name, Arsize) 读取字符 输入结束条件:Enter键对结束符处理:不丢弃缓冲区中的Enter、space和TAB(重要)。 cin.get()与cin.get(char ch)用于读取字符,他们的使用是相似的,即:ch=cin.get()与cin.get(ch)是等价的。 读取字符串 cin.get(array_name, Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符, 会丢弃最后的Enter字符(重要,但是不丢弃SPACE和TAB)。

    cin.getline()

    cin.getline()与 cin.get(array_name,Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。 但是这两个函数是有区别的: cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。 但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

    cin错误函数

    cin的错误处理机制,并且学习几个重要的函数:cin.fail(), cin.bad(), cin.good(), cin.clear(), cin.ignore()等。

    ios::badbit    001   输入(输出)流出现致命错误,不可挽回

    ios::eofbit    010   已经到达文件尾

    ios::failbit   100   输入(输出)流出现非致命错误,可挽回

    ios::goodbit   000   流状态完全正常, 各异常标志位都为0

    相应的函数1 or true if rdstate & XXbit is nonzero; otherwise 0。

    cin.clear()的作用是重置错误标志。 重置错误标志还不够!要是能将缓冲区的残留数据清空了就好了哦!下面我们再来看一个很重要的函数!

    basic_istream&ignore(streamsize _Count = 1, int_type _Delim = traits_type::eof());

    这个函数用来丢弃输入缓冲区中的字符,第一参数定义一个数,第二个参数定义一个字符变量。下面解释一下函数是怎样执行的:函数不停的从缓冲区中取一个字符,并判断是不是_Delim,如果不是则丢弃并进行计数,当计数达到_Count退出,如果是则丢弃字符退出。例:cin.ignore(5, 'a'); 函数将不断从缓冲区中取一个字符丢弃,直到丢弃的字符数达到5或者读取的字符为'a'。

    参考链接: https://wikipedia.sogou.se/wiki/String_(C++标准库) https://blog.csdn.net/sinat_40872274/article/details/81367815 https://blog.csdn.net/caimouse/article/details/78833505 https://blog.csdn.net/Hadwin1991/article/details/81545863 https://blog.csdn.net/vir_lee/article/details/80645066

    Processed: 0.016, SQL: 9