C++中string类

    技术2022-05-20  35

    一.string本质 其实,string并不是一个单独的容器,只是basic_string 模板类的一个typedef 而已,相对应的还有wstring, 你在string 头文件中你会发现下面的代码: extern "C++" {             typedef basic_string string;             typedef basic_string wstring; } // extern "C++"

    二.构造字符串   char allArray[] = "All‘s well that ends well";   string five(allArray, 20);   string six(allArray+6, allArray+10);   原型:string(const char *s, size_type n)   强制从s那里复制n个字符串,如果s的长度小于n,仍然复制无用的字符。   原型:template string(Iter begin, Iter end)   由于数组名相当于指针,所以allArray+6, allArray+10的类型都是char *,因此使用模板时,将类型char *替换Iter。six初始化为well。   string seven(five+6, five+10); //该语句是错误的,对象名不会被看着对象的地址,five不是指针,而five[6]是个char值,所以&five[6]是一个地址。   string seven(&five[6], &five[10]);

    三.string类输入    对于C-风格:    char info[6];    cin.getline(info, 6); //read a line, discard /n    cin.getline(info, 6, ":"); //read up to :,discard :    对于string:    string sbuff;    cin.getline(cin,info); //read a line, discard /n    cin.getline(cin,info, ":"); //read up to :,discard :    它们之间主要区别:string版本的getline将自动调整目标string对象的大小。string对象的最大允许长度,由string::npos指定,这通常是最大unsigned int值。

    四.sting类使用    string 提供了非常丰富的查找函数find(find_first_of,find_last_o和substr),insert, replace和erase等函数.    string的c_str()函数是用来得到C语言风格的字符串,其返回的指针不能修改其空间。而且在下一次使用时重新调用获得新的指针。    string的data()函数返回的字符串指针不会以'/0'结束,千万不可忽视。    有这样一个需求:过滤一行开头和结尾的所有非英文字符。看看用string 如何实现: #include #include using namespace std; int main(){     string strinfo="       //*---Hello Word!......------";     string strset="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";     int first = strinfo.find_first_of(strset);     if(first == string::npos) {             cout<<"not find any characters"<             return -1;     }     int last = strinfo.find_last_of(strset);     if(last == string::npos) {             cout<<"not find any characters"<             return -1;     }     cout << strinfo.substr(first, last - first + 1)<     return 0; }

    五.CString,int,string,char*之间的转换 1.string -> CString  CString.format("%s", string.c_str()); 

    2.char -> CString  CString.format("%s", char*); 

    3.char -> string  string s(char *); 

    4.string -> char *  char *p = string.c_str(); 

    5.CString -> string  string s(CString.GetBuffer()); 

    6.string -> CString  CString.format("%s", string.c_str());  用c_str()确实比data()要好. 

    7.char -> string  string s(char *);  你的只能初始化,在不是初始化的地方最好还是用assign(). 

    8.CString -> string  string s(CString.GetBuffer());  GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 

    9.将字符转换为整数,可以使用atoi、_atoi64或atol。

    10.CString转换 char[100] char a[100];  CString str("aaaaaa");  strncpy(a,(LPCTSTR)str,sizeof(a));

    六附录 string 函数列表 函数名      描述   begin      得到指向字符串开头的Iterator   end      得到指向字符串结尾的Iterator   rbegin      得到指向反向字符串开头的Iterator   rend      得到指向反向字符串结尾的Iterator   size      得到字符串的大小   length      和size函数功能相同   max_size      字符串可能的最大大小   capacity      在不重新分配内存的情况下,字符串可能的大小   empty      判断是否为空   operator[]      取第几个元素,相当于数组   c_str      取得C风格的const char* 字符串   data      取得字符串内容地址   operator=      赋值操作符   reserve      预留空间   swap      交换函数   insert      插入字符   append      追加字符   push_back      追加字符   operator+=      += 操作符   erase      删除字符串   clear      清空字符容器中所有内容   resize      重新分配空间   assign      和赋值操作符一样   replace      替代   copy      字符串到空间   find      查找   rfind      反向查找   find_first_of      查找包含子串中的任何字符,返回第一个位置   find_first_not_of      查找不包含子串中的任何字符,返回第一个位置   find_last_of      查找包含子串中的任何字符,返回最后一个位置   find_last_not_of      查找不包含子串中的任何字符,返回最后一个位置   substr      得到字串   compare      比较字符串   operator+      字符串链接   operator==      判断是否相等   operator!=      判断是否不等于   operator<      判断是否小于   operator>>      从输入流中读入字符串   operator<<      字符串写入输出流   getline      从输入流中读入一行 


    最新回复(0)