精华内容
下载资源
问答
  • 以下是对c++中string常用函数的用法进行了详细的分析介绍,需要的朋友可以过来参考下
  • C++中String的常用函数用法总结

    万次阅读 多人点赞 2018-08-27 09:15:36
    一. string的构造函数的形式: ...string s(str, strbegin,strlen):将字符串str从下标strbegin开始、长度为strlen的部分作为字符串初值 string s(cstr, char_len):以C_string类型cstr的前char_len个字...

    一. string的构造函数的形式:


    string str:生成空字符串
    
    string s(str):生成字符串为str的复制品
    
    string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
    
    string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值
    
    string s(num ,c):生成num个c字符的字符串
    
    string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
    
    eg:
    
    
        string str1;               //生成空字符串
        string str2("123456789");  //生成"1234456789"的复制品
        string str3("12345", 0, 3);//结果为"123"
        string str4("012345", 5);  //结果为"01234"
        string str5(5, '1');       //结果为"11111"
        string str6(str2, 2);      //结果为"3456789"
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    void test1()
    {
        string str1;               //生成空字符串
        string str2("123456789");  //生成"1234456789"的复制品
        string str3("12345", 0, 3);//结果为"123"
        string str4("0123456", 5);  //结果为"01234"
        string str5(5, '1');       //结果为"11111"
        string str6(str2, 2);      //结果为"3456789"
    
        cout<<"str2:"<<str2<<endl;
        cout<<"str3:"<<str3<<endl;
        cout<<"str4:"<<str4<<endl;
        cout<<"str5:"<<str5<<endl;
        cout<<"str6:"<<str6<<endl;
    }
    
    int main()
    {
        test1();
        return 0;
    }

    这里写图片描述

    二. string的大小和容量::

    
    1. size()和length():返回string对象的字符个数,他们执行效果相同。
    
    2. max_size():返回string对象最多包含的字符数,超出会抛出length_error异常
    
    3. capacity():重新分配内存之前,string对象能包含的最大字符数
    
    
    void test2()
    {
        string s("1234567");
        cout << "size=" << s.size() << endl;
        cout << "length=" << s.length() << endl;
        cout << "max_size=" << s.max_size() << endl;
        cout << "capacity=" << s.capacity() << endl;
    
    }

    这里写图片描述

    三. string的字符串比较::

    1. C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。  
    在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,  
    比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)
    同时,string (“aaaa”) <string(aaaaa)。    
    
    2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。 
      他返回一个整数来表示比较结果,返回值意义如下:0:相等 1:大于 -1:小于 (A的ASCII码是65a的ASCII码是97)
    void test3()
    {
        // (A的ASCII码是65,a的ASCII码是97)
        // 前面减去后面的ASCII码,>0返回1,<0返回-1,相同返回0
        string A("aBcd");
        string B("Abcd");
        string C("123456");
        string D("123dfg");
    
        // "aBcd" 和 "Abcd"比较------ a > A
        cout << "A.compare(B):" << A.compare(B)<< endl;                          // 结果:1
    
        // "cd" 和 "Abcd"比较------- c > A
        cout << "A.compare(2, 3, B):" <<A.compare(2, 3, B)<< endl;                // 结果:1
    
        // "cd" 和 "cd"比较 
        cout << "A.compare(2, 3, B, 2, 3):" << A.compare(2, 3, B, 2, 3) << endl;  // 结果:0
    
    
        // 由结果看出来:0表示下标,3表示长度
        // "123" 和 "123"比较 
        cout << "C.compare(0, 3, D, 0, 3)" <<C.compare(0, 3, D, 0, 3) << endl;    // 结果:0
    
    }

    这里写图片描述

    四. string的插入:push_back() 和 insert()


    void  test4()
    {
        string s1;
    
        // 尾插一个字符
        s1.push_back('a');
        s1.push_back('b');
        s1.push_back('c');
        cout<<"s1:"<<s1<<endl; // s1:abc
    
        // insert(pos,char):在制定的位置pos前插入字符char
        s1.insert(s1.begin(),'1');
        cout<<"s1:"<<s1<<endl; // s1:1abc
    }

    这里写图片描述

    五、string拼接字符串:append() & + 操作符


    void test5()
    {
        // 方法一:append()
        string s1("abc");
        s1.append("def");
        cout<<"s1:"<<s1<<endl; // s1:abcdef
    
        // 方法二:+ 操作符
        string s2 = "abc";
        /*s2 += "def";*/
        string s3 = "def";
        s2 += s3.c_str();
        cout<<"s2:"<<s2<<endl; // s2:abcdef
    }

    这里写图片描述

    六、 string的遍历:借助迭代器 或者 下标法


    void test6()
    {
        string s1("abcdef"); // 调用一次构造函数
    
        // 方法一: 下标法
    
        for( int i = 0; i < s1.size() ; i++ )
        {
            cout<<s1[i];
        }
        cout<<endl;
    
        // 方法二:正向迭代器
    
        string::iterator iter = s1.begin();
        for( ; iter < s1.end() ; iter++)
        {
            cout<<*iter;
        }
        cout<<endl;
    
        // 方法三:反向迭代器
        string::reverse_iterator riter = s1.rbegin();
        for( ; riter < s1.rend() ; riter++)
        {
            cout<<*riter;
        }
        cout<<endl;
    }

    这里写图片描述

    七、 string的删除:erase()

    1. iterator erase(iterator p);//删除字符串中p所指的字符
    
    2. iterator erase(iterator first, iterator last);//删除字符串中迭代器
    
    区间[first,last)上所有字符
    
    3. string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引
    
    位置pos开始的len个字符
    
    4. void clear();//删除字符串中所有字符
    void test6()
    {
        string s1 = "123456789";
    
    
        // s1.erase(s1.begin()+1);              // 结果:13456789
        // s1.erase(s1.begin()+1,s1.end()-2);   // 结果:189
        s1.erase(1,6);                       // 结果:189
        string::iterator iter = s1.begin();
        while( iter != s1.end() )
        {
            cout<<*iter;
            *iter++;
        }
        cout<<endl;
    
    }

    八、 string的字符替换:


    1. string& replace(size_t pos, size_t n, const char *s);//将当前字符串
    
    从pos索引开始的n个字符,替换成字符串s
    
    2. string& replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符,替换成n1个字符c
    
    3. string& replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s
    void test7()
    {
        string s1("hello,world!");
    
        cout<<s1.size()<<endl;                     // 结果:12
        s1.replace(s1.size()-1,1,1,'.');           // 结果:hello,world.
    
        // 这里的6表示下标  5表示长度
        s1.replace(6,5,"girl");                    // 结果:hello,girl.
        // s1.begin(),s1.begin()+5 是左闭右开区间
        s1.replace(s1.begin(),s1.begin()+5,"boy"); // 结果:boy,girl.
        cout<<s1<<endl;
    }

    九、 string的大小写转换:tolower()和toupper()函数 或者 STL中的transform算法


    方法一:使用C语言之前的方法,使用函数,进行转换

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string s = "ABCDEFG";
    
        for( int i = 0; i < s.size(); i++ )
        {
            s[i] = tolower(s[i]);
        }
    
        cout<<s<<endl;
        return 0;
    }

    方法二:通过STL的transform算法配合的toupper和tolower来实现该功能

    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string s = "ABCDEFG";
        string result;
    
        transform(s.begin(),s.end(),s.begin(),::tolower);
        cout<<s<<endl;
        return 0;
    }

    相关的我的另外一篇博客:
    C++对string进行大小写转换
    https://blog.csdn.net/qq_37941471/article/details/81988702

    十、 string的查找:find


    1. size_t find (constchar* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引,
    
        -1表示查找不到子串
    
    2. size_t find (charc, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引,
    
        -1表示查找不到字符
    
    3. size_t rfind (constchar* s, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,
    
        -1表示查找不到子串
    
    4. size_t rfind (charc, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符
    
    5. size_tfind_first_of (const char* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    6. size_tfind_first_not_of (const char* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    7. size_t find_last_of(const char* s, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    8. size_tfind_last_not_of (const char* s, size_t pos = npos) const;
    
     //在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串
    void test8()
    {
        string s("dog bird chicken bird cat");
    
        //字符串查找-----找到后返回首字母在字符串中的下标
    
        // 1. 查找一个字符串
        cout << s.find("chicken") << endl;        // 结果是:9
    
        // 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
        cout << s.find('i',6) << endl;            // 结果是:11
    
        // 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
        cout << s.rfind("chicken") << endl;       // 结果是:9
    
        // 4. 从字符串的末尾开始查找字符
        cout << s.rfind('i') << endl;             // 结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符
    
        // 5. 在该字符串中查找第一个属于字符串s的字符
        cout << s.find_first_of("13br98") << endl;  // 结果是:4---b
    
        // 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog,然后bird匹配不到,所以打印4
        cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4
        cout << s.find_first_not_of("dog bird 2006") << endl;  // 结果是:9
    
        // 7. 在该字符串最后中查找第一个属于字符串s的字符
        cout << s.find_last_of("13r98") << endl;               // 结果是:19
    
        // 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c,然后空格匹配不到,所以打印21
        cout << s.find_last_not_of("teac") << endl;            // 结果是:21
    
    }

    十一、 string的排序:sort(s.begin(),s.end())


    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;
    
    void test9()
    {
        string s = "cdefba";
        sort(s.begin(),s.end());
        cout<<"s:"<<s<<endl;     // 结果:abcdef
    }

    十二、 string的分割/截取字符串:strtok() & substr()


    strtok():分割字符串

    void test10()
    {
        char str[] = "I,am,a,student; hello world!";
    
        const char *split = ",; !";
        char *p2 = strtok(str,split);
        while( p2 != NULL )
        {
            cout<<p2<<endl;
            p2 = strtok(NULL,split);
        }
    }

    这里写图片描述

    void test11()
    {
        string s1("0123456789");
        string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度
        cout<<s2<<endl;
    }
    展开全文
  • c++中string用法

    万次阅读 多人点赞 2018-09-01 14:21:22
    初始化有两种方式,其中使用等号的是拷贝初始化,不使用等号的是直接初始化。 string str1 = &amp;amp;amp;amp;amp;amp;amp;quot;hello world&amp;amp;amp;amp;amp;amp;amp;quot;; //str1 = &amp;amp...

    一、初始化

    初始化有两种方式,其中使用等号的是拷贝初始化,不使用等号的是直接初始化。

    string str1 = "hello world";      // str1 = "hello world"
    string str2("hello world");       // str2 = "hello world"
    string str3 = str1;               // str3 = "hello world"
    string str4(str2);                // str4 = "hello world"
    string str5(10,'h');              // str5 = "hhhhhhhhhh"
    string str6 = string(10,'h');     // str6 = "hhhhhhhhhh"
    string str7(str1,6);              // str7 = "world"     从字符串str1第6个字符开始到结束,拷贝到str7中
    string str8 = string(str1,6);     // str8 = "world"
    string str9(str1,0,5);            // str9 = "hello"     从字符串str1第0个字符开始,拷贝5个字符到str9中
    string str10 = string(str1,0,5);  // str10 = "hello"
    char c[] = "hello world";
    string str11(c,5);                // str11 = "hello"    将字符数组c的前5个字符拷贝到str11中
    string str12 = string(c,5);       // str12 = "hello"
    

    值得一提的是,如果:

    string str13 = string("hello world",5)      // str13 = "hello"  而非  " world"
    

    此时,"hello world"应看作字符数组(参见str11),而非string对象(参见str7)
    为了避免发生意外,在字符串插入、替换、添加、赋值、比较中去除了关于后一种的相关操作(参见后文)。

    二、获取长度(length、size)

    length()函数与size()函数均可获取字符串长度。

    string str = "hello world";
    cout << str.length() << str.size();     // 11   11
    

    当str.length()与其他类型比较时,建议先强制转换为该类型,否则会意想之外的错误。
    比如:-1 > str.length() 返回 true。

    三、插入(insert)

    基本情况为以下四种,其余变形函数自行摸索即可。

    string str = "hello world";
    string str2 = "hard ";
    string str3 = "it is so happy wow";
    
    //s.insert(pos,n,ch)        在字符串s的pos位置上面插入n个字符ch
    str.insert(6,4,'z');        // str = "hello zzzzworld"
    
    //s.insert(pos,str)         在字符串s的pos位置插入字符串str
    str.insert(6,str2);         // str = "hello hard world"
    
    //s.insert(pos,str,a,n)     在字符串s的pos位置插入字符串str中位置a到后面的n个字符
    str.insert(6,str3,6,9);     // str = "hello so happy world"
    
    //s.insert(pos,cstr,n)      在字符串s的pos位置插入字符数组cstr从开始到后面的n个字符
    //此处不可将"it is so happy wow"替换为str3
    str.insert(6,"it is so happy wow",6);       // str = "hello it is world"
    

    四、替换(replace)

    替换与插入对应,对比理解更为简单。

    string str = "hello world";
    string str2 = "hard ";
    string str3 = "it is so happy wow";
    
    //s.replace(p0,n0,n,ch)           删除p0开始的n0个字符,然后在p0处插入n个字符ch
    str.replace(0,6,4,'z');           // str = "zzzzworld"
    
    //s.replace(p0,n0,str)            删除从p0开始的n0个字符,然后在p0处插入字符串str
    str.replace(0,6,str2);            // str = "hard world"
    
    //s.replace(p0,n0,str,pos,n)      删除p0开始的n0个字符,然后在p0处插入字符串str中从pos开始的n个字符
    str.replace(0,6,str3,6,9);        // str = "so happy world"
    
    //s.replace(p0,n0,cstr,n)         删除p0开始的n0个字符,然后在p0处插入字符数组cstr的前n个字符
    //此处不可将"it is so happy wow"替换为str3
    str.replace(0,6,"it is so happy wow",6);        // str = "it is world"
    

    五、添加(append)

    append函数用在字符串的末尾添加字符和字符串。(同样与插入、替换对应理解)

    string str = "hello world";
    string str2 = "hard ";
    string str3 = "it is so happy wow";
    
    //s.append(n,ch)           在当前字符串结尾添加n个字符c
    str.append(4,'z');         // str = "hello worldzzzz"
    
    //s.append(str)            把字符串str连接到当前字符串的结尾
    str.append(str2);          // str = "hello worldhard "
    
    //s.append(str,pos,n)      把字符串str中从pos开始的n个字符连接到当前字符串的结尾
    str.append(str3,6,9);      // str = "hello worldso happy "
    
    //append(cstr,int n)       把字符数组cstr的前n个字符连接到当前字符串结尾
    //此处不可将"it is so happy wow"替换为str3
    str.append("it is so happy wow",6);      // str = "hello worldit is "
    

    六、赋值(assign)

    赋值也是一种初始化方法,与插入、替换、添加对应理解较为简单。

    string str;
    string temp = "welcome to my blog";
    
    //s.assign(n,ch)             将n个ch字符赋值给字符串s
    str.assign(10,'h');          // str = "hhhhhhhhhh"
    
    //s.assign(str)              将字符串str赋值给字符串s
    str.assign(temp);            // str = "welcome to my blog"
    
    //s.assign(str,pos,n)        将字符串str从pos开始的n个字符赋值给字符串s
    str.assign(temp,3,7);        // str = "come to"
    
    //s.assaign(cstr,n)          将字符数组cstr的前n个字符赋值给字符串s
    //此处不可将"it is so happy wow"替换为temp
    str.assign("welcome to my blog",7);     // str = "welcome"
    

    七、删除(erase)

    string str = "welcome to my blog";
    
    //s.erase(pos,n)           把字符串s从pos开始的n个字符删除
    str.erase(11,3);           // str = "welcome to blog"
    

    八、剪切(substr)

    string str = "The apple thinks apple is delicious";
    
    //s.substr(pos,n)                      得到字符串s位置为pos后面的n个字符组成的串
    string s1 = str.substr(4,5);           // s1 = "apple"
    
    //s.substr(pos)                        得到字符串s从pos到结尾的串
    string s2 = str.substr(17);            // s2 = "apple is delicious"
    

    九、比较(compare)

    两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。
    若是遇到‘\0’结束比较,则长的子串大于短的子串,如:“9856” > “985”。
    如果两个字符串相等,那么返回0,调用对象大于参数返回1,小于返回-1。

    string str1 = "small leaf";
    string str2 = "big leaf";
    
    //s.compare(str)                     比较当前字符串s和str的大小
    cout << str1.compare(str2);                   // 1
    
    //s.compare(pos,n,str)               比较当前字符串s从pos开始的n个字符与str的大小
    cout << str1.compare(2,7,str2);               // -1
    
    //s.compare(pos,n0,str,pos2,n)       比较当前字符串s从pos开始的n0个字符与str中pos2开始的n个字符组成的字符串的大小
    cout << str1.compare(6,4,str2,4,4);           // 0
    
    //s.compare(pos,n0,cstr,n)           比较当前字符串s从pos开始的n0个字符与字符数组cstr中前n个字符的大小
    //此处不可将"big leaf"替换为str2
    cout << str1.compare(6,4,"big leaf",4);       // 1
    

    十、交换(swap)

    交换两个字符串的值。

    string str1 = "small leaf";
    string str2 = "big leaf";
    
    //或者str1.swap(str2)  ,输出结果相同
    swap(str1,str2);        // str1 = "big leaf"     str2 = "small leaf"
    swap(str1[0],str1[1]);  // str1 = "ibg leaf"
    

    十一、反转(reverse)

    反转字符串。

    string str = "abcdefghijklmn";
    reverse(str.begin(),str.end());       // str = "nmlkjihgfedcba"
    

    十二、数值转化(sto*)

    详情参见前篇文章《int、string 类型相互转换》。
    (本小白调试时,只有将p设置为0或nullptr才运行成功)

    to_string(val)	      //把val转换成string
    stoi(s,p,b)	          //把字符串s从p开始转换成b进制的int
    stol(s,p,b)	          //把字符串s从p开始转换成b进制的long
    stoul(s,p,b)	      //把字符串s从p开始转换成b进制的unsigned long
    stoll(s,p,b)	      //把字符串s从p开始转换成b进制的long long
    stoull(s,p,b)	      //把字符串s从p开始转换成b进制的unsigned long long
    stof(s,p)	          //把字符串s从p开始转换成float
    stod(s,p)	          //把字符串s从p开始转换成double
    stold(s,p)	          //把字符串s从p开始转换成long double
    

    十三、迭代器(iterator)

    详情参见下篇文章《string类型中迭代器的使用》。

    string str = "abcdefghijklmn";
    
    //s.begin()      返回字符串s第一个字符的位置
    char a = *(str.begin());           // a
    
    //s.end()        返回字符串s最后一个字符串的后一个位置
    char b = *(str.end()-1);           // n
    
    //s.rbegin()     返回字符串s最后一个字符的位置
    char c = *(str.rbegin());          // n
    
    //s.rend()       返回字符串s第一个字符的前一个位置
    char d = *(str.rend()-1);          // a
    

    十四、查找(find)

    14.1 find函数

    string str = "The apple thinks apple is delicious";     //长度34
    string key = "apple";
    
    //s.find(str)            查找字符串str在当前字符串s中第一次出现的位置
    int pos1 = str.find(key);                  // 4
    
    //s.find(str,pos)        查找字符串str在当前字符串s的[pos,end]中第一次出现的位置
    int pos2 = str.find(key, 10);              // 17
    
    //s.find(cstr,pos,n)     查找字符数组cstr前n的字符在当前字符串s的[pos,end]中第一次出现的位置
    //此处不可将"delete"替换为str2(如果定义str2 = "delete")
    int pos3 = str.find("delete", 0, 2);       // 26
    
    //s.find(ch,pos)         查找字符ch在当前字符串s的[pos,end]中第一次出现的位置
    int pos4 = str.find('s', 0);               // 15
    

    14.2 rfind函数

    //s.rfind(str)            查找字符串str在当前字符串s中最后一次出现的位置
    int pos5 = str.rfind(key);                 // 17
    
    //s.rfind(str,pos)        查找字符串str在当前字符串s的[0,pos+str.length()-1]中最后一次出现的位置
    int pos6 = str.rfind(key, 16);             // 4
    
    //s.rfind(cstr,pos,n)     查找字符数组cstr前n的字符在当前字符串s的[0,pos+n-1]中最后一次出现的位置
    //此处不可将"apple"替换为key
    int pos7 = str.rfind("apple", 40, 2);      // 17
    
    //s.rfind(ch.pos)         查找字符ch在当前字符串s的[0,pos]中最后一次出现的位置
    int pos8 = str.rfind('s', 30);             // 24
    

    14.3 find_xxx_of函数

    string str = "The early birds catch the warm";            //长度30
    string key = "aeiou";
    

    find_first_of

    // s.find_first_of(str)                查找字符串str中的任意字符在当前字符串s中第一次出现的位置
    int pos1 = str.find_first_of(key);                // 2
    
    //s.find_first_of(str,pos)             查找字符串str中的任意字符在当前字符串s的[pos,end]中第一次出现的位置
    int pos2 = str.find_first_of(key, 10);            // 11
    
    //s.find_first_of(cstr,pos,n)          查找字符串str前n个任意字符在当前字符串s的[pos,end]中第一次出现的位置
    //此处不可将"aeiou"替换为key
    int pos3 = str.find_first_of("aeiou", 7, 2);      // 17
    
    //s.find_first_of(ch,pos)              查找字符ch在当前字符串s的[pos,end]中第一次出现的位置
    int pos4 = str.find_first_of('r', 0);             // 6
    

    find_first_not_of

    //s.find_first_not_of(str)             查找字符串str之外的任意字符在当前字符串s中第一次出现的位置
    int pos1 = str.find_first_not_of(key);                 // 0
    
    //s.find_first_not_of(str,pos)         查找字符串str之外的任意字符在当前字符串s的[pos,end]中第一次出现的位置
    int pos2 = str.find_first_not_of(key, 10);             // 10
    
    //s.find_first_not_of(cstr,pos,n)      查找字符串str前n个之外任意字符在当前字符串s的[pos,end]中第一次出现的位置
    //此处不可将"aeiou"替换为key
    int pos3 = str.find_first_not_of("aeiou", 7, 2);       // 7
    
    //s.find_first_not_of(str)             查找字符ch之外任意字符在当前字符串s的[pos,end]中第一次出现的位置
    int pos4 = str.find_first_not_of('r', 0);              // 0
    

    find_last_of

    //s.find_last_of(str)                 查找字符串str中的任意字符在当前字符串s中最后一次出现的位置
    int pos1 = str.find_last_of(key);                      // 27
    
    //s.find_last_of(str,pos)             查找字符串str中的任意字符在当前字符串s的[0,pos]中最后一次出现的位置
    int pos2 = str.find_last_of(key, 15);                  // 11
    
    //s.find_last_of(cstr,pos,n)          查找字符串str前n个任意字符在当前字符串s的[0,pos]中最后一次出现的位置
    //此处不可将"aeiou"替换为key
    int pos3 = str.find_last_of("aeiou", 20, 2);           // 17
    
    //s.find_last_of(str)                 查找字符ch在当前字符串s的[0,pos]中最后一次出现的位置
    int pos4 = str.find_last_of('r', 30);                  // 28
    

    find_last_not_of

    //s.find_last_not_of(str)             查找字符串str之外的任意字符在当前字符串s中最后一次出现的位置
    int pos1 = str.find_last_not_of(key);                  // 29
    
    //s.find_last_not_of(str,pos)         查找字符串str之外的任意字符在当前字符串s的[0,pos]中最后一次出现的位置
    int pos2 = str.find_last_not_of(key, 15);              // 15
    
    //s.find_last_not_of(cstr,pos,n)      查找字符串str前n个之外任意字符在当前字符串s的[0,pos]中最后一次出现的位置
    //此处不可将"aeiou"替换为key
    int pos3 = str.find_last_not_of("aeiou", 20, 2);       // 20
    
    //s.find_last_not_of(str)             查找字符ch之外任意字符在当前字符串s的[0,pos]中最后一次出现的位置
    int pos4 = str.find_last_not_of('r', 30);              // 29
    
    展开全文
  • 本资源整理了几种c++中double与string相互转换方式,包含完整的vs2010工程。可直接使用
  • std::string s = f.str(); 等同于 boost::format f = boost::format("%.2f %s %d"); f % 1.234 %"123" ; std::string s = f.str(); 类似CString的格式化 CString t = L"123"; CString s; s.For
  • C++中string用法简介

    万次阅读 多人点赞 2019-08-21 17:21:17
    本文主要介绍C++中string类的常见用法。 1. 概述 stringC++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库...

    本文主要介绍C++中的string类的常见用法。

    1. 概述

    string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口。

    2. 常见用法

    2.1 string转换为char*

    方法一:使用 c_str() 方法,代码(stringsimple.cpp)如下:

    #include <string>
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    int main()
    {
        string strOutput = "Hello World";
    
        cout << "[cout] strOutput is: " << strOutput << endl;
    
        // string 转换为 char*
        const char* pszOutput = strOutput.c_str();
        
        printf("[printf] strOutput is: %s\n", pszOutput);
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

    上述代码执行结果说明:

    • cout 可直接输出 string 类的对象的内容;
    • 使用 c_str() 方法转换 string 类型到 char* 类型时,需要为char*添加 const 关键字;
    • printf() 函数不能直接打印 string 类的对象的内容,可以通过将 string 转换为 char* 类型,再使用 printf() 函数打印。

    2.1.1 data()方法与c_str()方法

    data()方法与c_str()方法相似,都返回 const char* 类型。两者区别和联系如下:

    • 在C++98版本中,c_str()返回 const char* 类型,返回的字符串会以空字符(null character)结尾;
    • 在C++98版本中,data()返回 const char* 类型,返回的字符串不以空字符(null character)结尾;
    • 在C++11版本中,c_str()与data()用法相同(Both string::data and string::c_str are synonyms and return the same value.)

    2.2 计算string长度、string字符串比较

    示例代码如下:

    #include <string>
    #include <iostream>
    
    #define HELLOSTR "Hello World"
    
    using namespace std;
    
    int main()
    {
        string strOutput = "Hello World";
    
        int nLen = strOutput.length();
    
        cout << "the length of strOutput is: " << nLen << endl;
    
        if (0 == strOutput.compare(HELLOSTR))
        {
            cout << "strOutput equal with macro HELLOSTR" << endl;
        }
    
        return 0;
    }

    编译并执行上述代码,结果如下:

    [root@node1 /opt/liitdar/mydemos/simples]# ./stringsimple2 
    the length of strOutput is: 11
    strOutput equal with macro HELLOSTR
    [root@node1 /opt/liitdar/mydemos/simples]# 

    上述代码执行结果说明:

    • string类型可直接使用 length() 方法计算字符串长度,该方法计算结果为字符串的实际长度,如本例中"Hello World"字符串的长度为11;
    • string类型可使用 compare(const string& str) 方法进行字符串比较。

    2.3 string对象判空

    可使用 empty() 方法对string类型的对象进行判空,如下:

        if (str2.empty())
        {
            cout << "str2 is empty." << endl;
        }
    

    2.4 char*、char[]转换为string

    将 char*、char[] 转换为 string 类型时,直接进行赋值操作,将 char*、char[] 的变量赋值给 string 对象即可。

    说明:这里所说的“赋值”操作,实际上是将 char*、char[] 定义的字符串的首地址赋值给 string 对象了。

    示例代码(stringtochar.cpp)如下:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        const char* pszName = "liitdar";
        char pszCamp[] = "alliance";
    
        string strName;
        string strCamp;
    
        strName = pszName;
        strCamp = pszCamp;
    
        cout << "strName is: " << strName << endl;
        cout << "strCamp is: " << strCamp << endl;
    
        return 0;
    }

    编译并执行上述代码,结果如下:

    2.5 string类的find方法

    使用string类的find方法,在字符串中检索自字符串是否存在。

    2.5.1 用法

    用法如下:

    size_t find (const string& str, size_t pos = 0) const;
    size_t find (const char* s, size_t pos = 0) const;
    size_t find (const char* s, size_t pos, size_t n) const;
    size_t find (char c, size_t pos = 0) const;

    2.5.2 返回值

    find函数返回值:

    The position of the first character of the first match. If no matches were found, the function returns string::npos.

    size_t is an unsigned integral type (the same as member type string::size_type).

    2.5.3 示例代码

    find方法的示例代码(string_find_test1.cpp)如下:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        // 待检索的字符串
        string strOutput = "|0|1|2|";
        // 需要检索的子串
        string strObj = "|1|";
    
        // 子串位于字符串中的位置
        size_t nLoc = strOutput.find(strObj);
        // 如果检索到子串在字符串中,则打印子串的位置
        if (nLoc != string::npos)
        {
            cout << "nLoc is: " << nLoc << endl;
        }
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

    2.6 string类的insert方法

    使用string类的insert方法,向字符串中插入字符(串)。官方的定义如下:

    Inserts additional characters into the string right before the character indicated by pos (or p).

    2.6.1 用法

    string (1)string& insert (size_t pos, const string& str);
    substring (2)string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
    c-string (3)string& insert (size_t pos, const char* s);
    buffer (4)string& insert (size_t pos, const char* s, size_t n);
    fill (5)

    string& insert (size_t pos, size_t n, char c);

    void insert (iterator p, size_t n, char c);

    single character (6)iterator insert (iterator p, char c);
    range (7)

    template <class InputIterator>

        void insert (iterator p, InputIterator first, InputIterator last);

    2.6.2 示例代码

    insert方法的示例代码(string_insert_test1.cpp)如下:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string strDemo = "I am";
    
        strDemo.insert(4, " good.");
    
        cout << "strDemo is: " << strDemo << endl;
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

    2.7 int类型转为string类的方法

    这里介绍两种常见的 int 类型转换为 string 类的方法,示例代码如下:

    #include <string>
    #include <iostream>
    #include <sstream>
    
    using namespace std;
    
    int main()
    {
        // 方法1
        int nNum1 = 123;
        stringstream ss;
    
        ss << nNum1;
        string strTest1 = ss.str();
        cout << "strTest1 is: " << strTest1 << endl;
    
        /*
        string strTest2;
        strTest2 << ss;     // stringstream 未定义 << 操作符,故此句报错
        cout << "strTest2 is: " << strTest2 << endl;
        */
    
        string strTest3;
        ss >> strTest3;
        cout << "strTest3 is: " << strTest3 << endl;
    
        // 方法2
        int nNum2 = 456;
        string strTest4;
        strTest4 = to_string(nNum2);    // C++11 标准
        cout << "strTest4 is: " << strTest4 << endl;
    
        return 0;
    }
    
    

    编译并执行上述代码,结果如下:

     

    展开全文
  • 主要介绍了C++string中的insert()插入函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了C++中 string 的常用方法使用心得,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • c++中string和c语言string用法总结

    千次阅读 2019-10-15 19:18:00
    #c++中string和c语言string用法总结 #include <string.h> //c语言的头文件 #include using namespace std;//c++语言的头文件,必须加命名空间。 ##c++中的string 1.声明一个C++字符串: string Str; C++中的...

    实例引出:
    这个一个字符变换的题目:需要把输入的含有Q加数字的变为对应的Text+个数的形式:
    输入样例为:
    abddaQ123werQ1234
    输出为:abddaText1werText2
    我在编写的过程中遇到这些问题:1)用scanf和printf输入输出string时程序奔溃。2)用strcat连接2个字符串程序崩溃。(没用string.h时,程序报错,因为strcat为c语言方法)。
    总结:c++中的string是不以’/0’结尾,相对于一个无穷的char型。故不能用scanf和printf,c语言和c++中的string方法不是公用的,需要区别对待。

    #include
    #include<stdio.h>
    #include<string.h>
    #include
    using namespace std;
    int main() {
    int number;
    while(1){
    string d;
    cin>>d;
    char *p=&d[0];
    int k=0;
    number=1;
    char b[10];
    sprintf(b,"%s%d",“Text”,number);
    string store;
    while(k<d.length()){
    if(*p==‘Q’){
    p++;
    k++;
    while(*p>=‘0’&&*p<=‘9’){
    p++;
    k++;
    }
    store+=b;
    number++;
    sprintf(b,"%s%d",“Text”,number);
    }
    store+=*p;
    p++;
    k++;
    }
    cout<<store<<endl;
    *p=0;
    }
    return 0;
    }
    输出示例

    #c++中string和c语言string用法总结
    #include <string.h> //c语言的头文件
    #include using namespace std;//c++语言的头文件,必须加命名空间。

    ##c++中的string
    1.声明一个C++字符串: string Str;
    C++中的string相当于一个类,有构造函数和析构函数。

    2.字符串操作函数
    string相当于STL中的容器一样,其很多操作可以用STL中的方法操作:如++,=,push_back()。其具体操作函数如下:
    a) =,assign() //赋以新值
    b) swap() //交换两个字符串的内容
    c) +=,append(),push_back() //在尾部添加字符
    d) insert() //插入字符
    e) erase() //删除字符
    f) clear() //删除全部字符
    g) replace() //替换字符
    h) + //串联字符串
    i) ==,!=,<,<=,>,>=,compare() //比较字符串
    j) size(),length() //返回字符数量
    k) max_size() //返回字符的可能最大个数
    l) empty() //判断字符串是否为空
    m) capacity() //返回重新分配之前的字符容量
    n) reserve() //保留一定量内存以容纳一定数量的字符
    o) [ ], at() //存取单一字符
    p) >>,getline() //从stream读取某值
    q) << //将谋值写入stream
    r) copy() //将某值赋值为一个C_string
    s) c_str() //将内容以C_string返回
    t) data() //将内容以字符数组形式返回
    u) substr() //返回某个子字符串
    v)查找函数
    w)begin() end() //提供类似STL的迭代器支持
    x) rbegin() rend() //逆向迭代器
    y) get_allocator() //返回配置器

    3.1 C++字符串和C字符串的转换
    C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’/0’。c_str()返回一个以‘/0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或 字符数组内。C++字符串并不以’/0’结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。

    3.输入输出操作
    1.>> 从输入流读取一个string。
    2.<< 把一个string写入输出流。
    另一个函数就是getline(),他从输入流读取一行内容,直到遇到分行符或到了文件尾。

    ##c语言的string.h
    1.strcpy函数
    原型:strcpy(str1,str2);
    功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值,返回str1

    2.strncpy函数
    原型:strncpy(str1,str2,n);
    功能:将字符串str2中的前n个字符复制到字符串str1的前n个字符中,返回str1

    3.strcat函数
    原型:strcat(str1,str2);
    功能:将字符串str2添加到字符串str1的尾部,也就是拼接两个字符串
    原型2:strncat(str1,str2,n);
    功能2:将字符串str2的前n个字符添加到字符串str1的尾部,返回str1

    4.strlen函数
    原型:strlen(str1);
    功能:计算字符串str1的长度,一个int值

    5.strcmp函数
    原型:strcmp(str1,str2);

    功能:比较两个字符串,如果两个字符串相等,则返回0;若str1大于str2(对于大于的理解,是指从两个字符串的第一个字符开始比较,若两个字符相同,则继续比较,若发现两个字符不相等,且str1中该字符的ASCII码大于str2中的,则表示str1大于str2),返回一个正数(这个正数不一定是1);若str1小于str2,返回一个负数(不一定是-1);若字符串str1的长度大于str2,且str2的字符与str1前面的字符相同,则也相对于str1大于str2处理
    原型2:strncmp(str1,str2,n);
    功能2:比较两个字符串的前n个字符
    原型3:stricmp(str1,str2); (在Windows中使用stricmp,在Linux中使用strcasecmp)
    功能3:忽略两个字符串中的大小写比较字符串,也就是对大小写不敏感

    6.strchr函数
    原型:strchr(str,c);
    功能:在str字符串中查找首次出现字符c的位置(从字符串的首地址开始查找)
    原型2:strrchr(str,c);
    功能2:在字符串str中从后向前开始查找字符c首次出现的位置
    原型3:strstr(str1,str2);

    功能3:在字符串str1中查找字符串str2的位置,若找到,则返回str2第一个字符在str1中的位置的指针,若没找到,返回NULL
    返回:字符c的位置的指针,若没有查找到字符c,则返回空指针NULL

    7.atoi、atof、atol函数
    atoi(str); //字符串转换到int整型
    atof(str); //字符串转换到double浮点数
    atol(str); //字符串转换到long整形

    ————————————————
    版权声明:本文为CSDN博主「深山里的小白羊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_33757398/article/details/81212618

    ————————————————
    版权声明:本文为CSDN博主「zhenzhenjiajia888」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/superna666/article/details/52809007/

    展开全文
  • 之前在leetcode进行string和int的转化时使用过istringstream,现在大致总结一下用法和测试用例。 介绍:C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h...
  • c++中 string 类的find函数的用法 在字符串查找需要的字符
  • ANSI标准C++中关于string的详细用法,有相应的短代码。
  • 关于C++中string头文件的用法

    千次阅读 2020-05-06 23:37:39
    下面的代码是string使用例子,在string头文件下,函数,是可以采取string str = "abcxyz"这种方式赋值的。 基本操作: 如代码所展示: 1.可以进行operator± 2.可以进行比较大小 3.length()/size() 4.insert() ...
  • 今天小编就为大家分享一篇对C++ string append方法的常用用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c的字符串的样式
  • stringC++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着...
  • c++ String 用法详解 (全面解析)

    千次阅读 多人点赞 2020-04-12 11:58:39
    由于string很重要,也有很多的操作,这里主要介绍一下string的一些基本操作级常用的操作
  • 主要介绍了C++实现string存取二进制数据的方法,针对STL中string用法进行了较为详细的分析,需要的朋友可以参考下
  • c++中string 的replace用法

    万次阅读 2018-06-19 11:30:57
    /*用法一:&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;*用str替换指定字符串从起始位置pos开始长度为len的字符&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;*...
  • c++中中的的string常常用用函函数数用用法法总总结结 以下是对c++中string常用函数的用法进行了详细的分析介绍需要的朋友可以过来参考下 标准c++中string类函数介绍 注注意意不不是是CString 之所以抛 char*的字符...
  • c++ string 用法详解

    万次阅读 多人点赞 2018-11-13 08:50:27
    c++ string 用法详解
  • c++中string的assign方法使用

    千次阅读 2018-07-30 10:49:49
    c++中string的assign方法使用 string的实际.h和.cpp文件是basic_string.h 和basic_string.tcc,所以string中assign也在这两个文件声明和定义; 1.assign的声明: basic_string&amp; assign(const basic_...
  • C++ string的基本用法

    千次阅读 2020-02-03 17:47:32
    string 类有多个构造函数,用法示例如下: string s1(); // si = "" string s2("Hello"); // s2 = "Hello" string s3(4, 'K'); // s3 = "KKKK" string s4("12345", 1, 3); //s4 = "234",即 "12345" 的从下标 .....
  • c++中string类型的常用方法,以及map的使用 #include <iostream> #include <map> using namespace std; string str = "helloworld"; char * buf = (char *)str.data();//string转char *型 int n = 100...
  • C++String中的find用法

    千次阅读 2019-05-30 13:45:06
    stringc++中一个非常重要函数。 在处理字符串的时候经常用到。 find是string中一个查找函数。 find用法: 1.find() 示例:(上代码) #include<iostream> #include<string> using namespace ...
  • C++ string用法和例子

    万次阅读 多人点赞 2016-08-24 15:31:19
    同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着良好的接口。虽然也有一些弊端,但是瑕不掩瑜。 其中使用的代码多数都是来自cpp官网,因为例子非常全。 声明和初始化方法: 想...
  • 1. 初始化的几种方法和错误案例 首先当然是包含头文件了: #include<string> 下面是几种初始化的方法,直接上代码了: //**初始化的几种方式**// string s1("Hello"); cout <<"s1= "<< s1 <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 399,894
精华内容 159,957
关键字:

c++中string的用法

c++ 订阅