Loading

C++ string 常用函数总结

头文件:#include<string>
[注]:文中关于个数的参数文档中为 size_type 型,更本质是 size_t 型,因为typedef size_t size_type,而 size_t 在不同系统内实现不同,大概为 unsigned int 型,为简便起见,本文均写为 int 型。另外,string 的许多函数都有各种重载,本文所写的只是较常用的。

官方文档

赋值

  1. string 类型的变量可以直接赋值:

    string str = "hello world";		//可以直接赋值 
    cout << str << endl;			//string 不支持 C 语言,因此输出只能使用 cout 不能使用 printf
    

    输出:

    hello world
    
  2. 使用 string 的构造函数来实现拷贝的效果:

    string substr = string(string str, int start, int num);
    

    由此得到的 substr 是截取字符串 strstartnum 个字符。

  3. 关于子串还有函数 substr(int start, int num) ,其效果同上。

    举例如下:

    //返回子字符串 substr
    string str = "012345678";
    string substr = str.substr(1,3);
    cout << substr << endl; 
    	
    substr = string(str, 2, 5);
    cout << substr << endl;
    

    输出:

    123
    23456
    

长度

​ 函数 string.size()string.length() 均可返回本字符串长度,返回值类型为 int(size_t)

运算符

  1. 字符串连接 +

    举例如下:

    string str1 = "abc", str2 = "def";
    str = str1 + str2;
    cout << str << endl;
    

    输出:

    abcdef
    
  2. 字典序比较:> < >= <= != ==

遍历/访问

  1. 使用下标 [] 访问

    同字符数组。

  2. 使用迭代器访问

    举例如下:

    	string str = "hello world";		//可以直接赋值 
    	printf("按元素下标访问:%c %c\n", str[0], str[str.size()-1]);
    									//可以按照元素下标访问
    	
    	//通过迭代器 iterator 访问 迭代器类似于指针 
    	printf("迭代器访问str:\t");
    	for(string::iterator it = str.begin(); it != str.end(); ++it)
    	{
    		printf("%c ", *it);
    	} 
    	printf("\n");
    	printf("str.begin() = #%c#", *str.begin());		//迭代器类似于指针 要加 * 
    	printf("str.end() = #%c#", *str.end());
    
    

    输出:

    按元素下标访问:h d
    迭代器访问str:  h e l l o   w o r l d
    str.begin() = #h#str.end() = # #
    

增删改查

  1. 插入 string.insert(int pos, string str)

    其作用为在字符串 stringpos 个字符处插入字符串 str

  2. 删除 string.erase(int pos, int len)

    其作用为从字符串 stringpos 个字符处删除 len 个字符。

  3. 清空字符串 string.clear()

  4. 判断字符串是否为空 string.empty()

    举例如下:

    	string str = "hello world";
    	
    	//插入
    	str.insert(0, "Start ");	//在开头插入
    	cout << "开头插入:" << str << endl;
    	str.insert(str.size(), " End.");	//在末尾插入
    	cout << "末尾插入:" << str << endl;	
    	str.insert(6, "Middle ");			//在中间插入 
    	cout << "中间插入:" << str << endl; 
    	
    	//删除
    	str.erase(0,1);		//删除 从第 0 位开始的 1 个 
    	cout << "删除第一个元素:" << str << endl;
    	str.erase(0, 2);	//删除 从第 0 位开始的 2 个 
    	cout << "删除前两个元素:" << str << endl;
    	cout << str.empty() << endl; 
    	str.clear();		//清空
    	cout << str.empty() << endl; 
    

    输出:

    开头插入:Start hello world
    末尾插入:Start hello world End.
    中间插入:Start Middle hello world End.
    删除第一个元素:tart Middle hello world End.
    删除前两个元素:rt Middle hello world End.
    0
    1
    
  5. 替换 string.replace(int pos, int len, string temp)

    其作用为替换 string 字符串从 poslen 个字符为 字符串 temp 。举例如下:

    string str = "123456";
    string temp = "abc";
    str.replace(0, 1, temp);
    cout << str << endl;
    

    输出为:

     abc23456
    
  6. 查询 string.find()

    本函数用于在字符串 string 中寻找字符或字符串,若找到则返回其第一个字符所在下标位置,若没有对应字符或字符串,则返回 string.npos ,即 -1 。举例如下:

        string str = "hello world";
    
        int found = str.find("world");
        if(found != str.npos)	//npos = -1
        {
            printf("%d\n", found);
        }
    
        found = str.find('l');
        if(found != str.npos)
        {
            printf("%d\n", found);
        }
    
        found = str.find('.'); 
        if(found == str.npos)
            printf("Not found!\n");
    

    输出为:

    6
    2
    Not found!
    
posted @ 2021-03-10 20:31  Lowell_liu  阅读(229)  评论(0编辑  收藏  举报