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说明,索引(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个位置查找字符串stsubstr()是取字符串的部分字符; c_str()接口是string类的一个函数,返回的是字符串的首地址,返回值类型是const char *。如果要使用它并对其进行赋值操作,必须要使用strcpy函数.如果哦直接进行赋值,是不会赋值成功的; atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数。
string类的最大长度为unsigned int的最大值;
任意进制转换为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将一个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>>该输入操作符是根据后面变量的类型读取数据。输入结束条件 :遇到Enter、Space、Tab键。(这个很重要!)对结束符的处理 :当第一个字符为分隔符时丢弃缓冲区中的结束符,当还存在其他cin输入时,会输出下一个非结束符字符串数据。
重要:当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。
该函数有三种格式:无参,一参数,二参数即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.get(array_name,Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。 但是这两个函数是有区别的: cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。 但是cin.getline()当输入超长时,会引起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