C++基础::string(二)

C++基础::string

构造

接受char*作为单参构造,且该单参未被explicit修饰(赋值即构造):

char* s = "hello";
            // char s[] = "hello";
std::string str = s;
            // std::string str(s);

std::string::size_type

find等成员函数返回值(下标)的类型;

为无符号整型,当带正负号的i与不带正负号的类型比较时,i会自动转型为无正负号值。

故当一个有符号数与无符号的0比较,并作为循环是否执行的判断依据时,将很有可能陷入死循环,无论循环体的内部是否对该有符号数执行减法的操作。

s[s.length()]

string s;
s[s.length()];              // yields '\0'

搜索与查找(Searching and Finding)

成员函数 功能 补充
find() 查找第一个与value值相等子串
rfind() 查找第一个与value相等的子串(反向查找)
反向为第一
find_first_of 查找第一个与“value中的某值”相等的字符
find_last_of 查找最后一个与“value中的某值”相等的子串
find_first_not_of 查找第一个“与value中的任何值都不相等”的字符
find_last_not_of 查找最后一个“与value中的任何值都不相等”的字符


std::string str = "hello";
auto pos = str.find("lll");
                // pos 的类型为std::string::size_type
                // 因为在str串中并未找到与"lll"相等的子串
                // pos == std::string::npos;
                // std::string::npos 是一个很大的无符号的整数 
pos = str.find_first_of("lll");
                // pos == 2
                // str 串中第一个出现在"lll"中的字符下标的位置

str = "hellllo";
pos = str.rfind("lll");
                // pos == 3
                // hel lll(第二个l的下标)
                // 也即第二个l开始的三个字符组成的子串是最后一个与"lll"相等的子串;

成员函数:.replace()1

  1. C++ replace() 函数用法详解 ↩

你可能感兴趣的:(C++基础::string(二))