天天看点

C++入门(20):字符串C++入门(20):字符串

C++入门(20):字符串

字符串

提取子字符串 substr() :返回当前字符串的一部分。常见的有两个输入参数的重载函数为:第一个参数表明从哪个位置开始提取子字符串,是一个从0开始的整数值;第二个参数是子字符串的长度。

比较字符串 compare() ;

如果字符串里什么也没有(一个空字符串),empty()函数将返回true值 。

添加字符串

字符串拼接 + :可以用来把一些新文本追加到一个字符串的末尾 ,像 append() 函数一样 ;

append()函数还可以把同样的字符多次追加到一个现有的字符串的末尾 ;

insert()函数:第一个参数代表一个起点位置,第二个参数是将被插入的字符串 ;

replace()函数:第一个参数代表一个起点位置,第二个参数表示想替换多少个字符,第三个参数是替换字符串。

示例代码如下:

#include <iostream>
#include <string>
#include <cctype>

int main(int argc, char** argv) {

    std::string s1 = "xiuxiuJessica" ;
    int  a = s1.size() ;
    std::cout << a << std::endl;
    std::string s2 = s1.substr(,) ;       //如果原字符串不够长,则提取到它的最后一个字符
    std::cout << s2 << std::endl;

    std::string s3 = "xiuxiujuice";
    int b = s3.compare(s1) ;                //如果s3>s1,返回正值;如果s3<s1,返回负值;如果s3==s1,返回0;
    std::cout << b << std::endl;            //返回 1

    std::string s4 = "" ;
    if(s4.empty())
    {
        std::cout << "s4 is empty." << std::endl;
    }

    s4 += "Hello" ;
    std::cout << s4  << std::endl;
    s4 += 'A';
    std::cout << s4  << std::endl;
    s4 += s3;
    std::cout << s4  << std::endl;

    std::string s5 = "ABC";
    s5.append(",abc");
    std::cout << s5  << std::endl;
    s5.append(s1);
    std::cout << s5  << std::endl;
    s5.append(,'!');                          //两个参数,第一个参数是添加的次数,第二个参数是要添加的字符。此处为添加3个!到s5后面
    std::cout << s5  << std::endl;

    std::string s6 = "abc" ;
    s6.insert(,"ABC") ;
    std::cout << s6  << std::endl;

    std::string s7 = "xiuxiu" ;
    s7.replace(,,"XI");                      //从第3个位置开始的2个字符替换,位置从0开始
    std::cout << s7  << std::endl;
    s7.replace(,,"xiuxiu");                 //如果替换字符串个数"xiuxiu"大于2,则全部替换,原字符串其余部分不变
    std::cout << s7  << std::endl;

    std::string s8 = "Jessica" ;
    s8.replace(,,,'A');                     //在第2个位置替换一个字符,替换 3 遍
    std::cout << s8  << std::endl;

    return ;
}
           

运行结果为:

iuxiu

s4 is empty.
Hello
HelloA
HelloAxiuxiujuice
ABC,abc
ABC,abcxiuxiuJessica
ABC,abcxiuxiuJessica!!!
abcABC
xiuXIu
xiuxiuxiuu
JeAAAsica
           

搜索字符串:

1) 区分字母大小写;

2) 如果未能找到一个匹配,所有这些搜索函数将返回一个常量值

string::npos

。可以把这个常量用在一个条件语句里以判断是否找到了一个匹配。

find():它将返回被搜索字符或字符串在给定字符串里第一次出现时的起始位置;第二个参数可选,表明想从什么地方开始搜索字符串(默认值是0)。

rfind() 函数和find()功能相同,唯一区别是 rfind()从字符串的末尾开始搜索字符串,但返回值仍是从字符串开头算起的起始位置——如果找到了匹配的话。

find_first_of() 函数可以用来寻找一组字符中的任何字符在给定字符串里第一次出现的位置;相反地, find_first_not_of() 用来寻找一组字符中的任何字符在给定字符串里第一次没有出现的位置。

find_last_of() 函数可以用来寻找一组字符中的任何字符在给定字符串里最后一次出现的位置;相反地, find_last_not_of() 用来寻找一组字符中的任何字符在给定字符串里最后一次没有出现的位置。

erase() 函数:第一个参数是一个用来表明从什么地方开始删除的起始位置,第二个参数是一个用来表明需要删除多少个字符的整数。

capacity()函数:返回为给定字符串当前分配的内存空间,即它现在可以容纳多少个字符。

reserve()函数:用来申请更多的存储空间。

示例代码如下:

int main(int argc, char** argv) {

    std::string ss1 = "I am Jessica and I am xiuxiu too.";
    unsigned int start = ss1.find("Jessica");
    std::cout << start << std::endl;
    unsigned int start1 = ss1.find("Jessica",);    // 结果还是5。如果没有找到,编译不会出错,当返回值是无符号时,返回大的整数,当返回值是int时,返回-1 ,返回随机数
    std::cout << start1 << std::endl;

    std::cout << ss1.size() << std::endl;
    unsigned int a1 = ss1.find_first_of("aeiou");
    std::cout << a1 << std::endl;
    unsigned int a2 = ss1.find_first_not_of("aeiou");
    std::cout << a2 << std::endl;
    unsigned int a3 = ss1.find_last_of("aeiou");
    std::cout << a3 << std::endl;
    unsigned int a4 = ss1.find_last_not_of("aeiou");
    std::cout << a4 << std::endl;

    if(ss1.find("xiuxiu") != std::string::npos)
    {
        std::cout << "Got it!" << std::endl;
    }
    else
    {
        std::cout << "Can't find it." << std::endl;
    }

    ss1.erase(,);                               //从第五个字符开始删除6个字符
    std::cout << ss1 << std::endl;
    ss1.erase();                                 //从第五个字符开始到结束全部删除
    std::cout << ss1 << std::endl;
    std::cout << ss1.capacity() << std::endl;
           

运行结果为:

//31是下标

Got it!
I am a and I am xiuxiu too.
I am

           

C++入门(19):向量与迭代器

继续阅读