c++ string知识点总结

知识点储备1:问题: 如何将一个字符(char)转化为字符串( string ) ?

 答案:直接转化的方法是没有的,只能通过数组来进行间接转化,代码例子如下:

   #include

  #include

  using namespace std;

 int main(){

char ch1='a';

char ch2='b';

string s[3] = {ch1,ch2,'\0'};    //在字符数组中末尾加上\0

string s1=s;                            //字符数组可以直接给string类型赋值

cout<

    }

 知识点储备2:c++中除了string对象必要的那些的操作,还会涉及到处理string对象中的字符(读取或者改变),数字:number   字母:alphabet

   cctype头文件中定义了一组标准库函数处理这部分工作,下面试主要函数名及其定义:

    (1)、isalnum(c)  当c为字母(al)或数字时(num)为真;

    (2)、isalpha(c)   当c为字母(alpha)时为真;

    (3)、isdigit(c)     当c是数字时为真;

    (4)、islower(c)   当c是小写字母时为真;

    (5)、isspace(c)  当c是空白字符时为真;

   (6)、isupper(c)  当c时大写字母时为真;

   (7)、tolower(c)  如果c是大写字母,输出对应的小写字母;否则原样输出c;

   (8)、toupper(c) 如果c是小写字母,输出对应的大写字母;否则原样输出c;

    (9)、使用范围for语句可以处理字符串中的每个字符  

for(auto c: str)

cout<

   使用范围for语句改变字符串中的字符

for(auto &c:str)

c=toupper(c);

    只处理string字符串中一部分字符:使用下标(类型为string::size_type)或者迭代器

 知识点储备3c++中一个string类型str和一个字符类型ch,,str+=ch;(即可以将字符串和字符进行相加重新赋值给一个字符串类型)   


知识点储备4:一、额外的string操作

                           大部分操作都是提供string和C风格字符数组之间的转换

                         (1)、构造string其他方法

string s(cp,n);                    //s为cp指向的数组中前n个字符的拷贝,注意此数组至少包含n个字符

string s(s1,pos2);             //s为string s2从下标pos2开始的字符串拷贝,注意pos2>s2.size(),构造函数未定义

string s(s1,pos1,len1);   //s为string s1从下标pos1开始的len1个字符串的拷贝

                          (2)、灰常重要的一个函数 substr操作

                                           substr:原始字符串一部分或者全部的拷贝   substr(开始位置,计数值),第二个参数可以默认

                                           如果开始位置超过了string大小,则函数会抛出一个out_of_range异常

   (3)、将string 变量转化为字符指针型       使用函数 c_str()

#include

......

string s="yuhuaihzu";

const char *p= s.c_str();

   二、改变string的方法

(1)迭代器版本的insert和erase函数

     添加元素:

                                      string的str.insert(p,t)  在迭代器p指向的元素之前创建一个值为 t 的元素,返回指向新添加的元素的迭代器 

    str.insert(p,n,t)  在迭代器p指向的元素之前创建n个值为 t 的元素,返回指向新添加第一个元素的迭代器 

    str.insert(p,b,e)  在迭代器p指向的元素之   前插入迭代器b和e指定范围内的元素,返回指向新添加第一个元素的迭代器

      删除元素:

string的str.erase(p) 为删除迭代器p所指定的元素,返回一个指向被删除元素之后元素的迭代器,若p指向尾元素,则返回尾后迭代器,若p是尾后迭代器,      则函数行为未定义; 

     str.erase(b,e)  位删除迭代器b和e所指定范围内的元素,返回一个指向最后一个被删除元素之后元素的迭代器;

(2)下标版本的insert和erase函数

添加元素:

string的str.insert(pos,args) 在pos之前插入args指定的字符,pos为下标;除了这个形式,还有各种省略参数,或者加一些别的参数,比如,

balabala

删除元素:

string的str.erase(pos,len)删除从pos开始的len个字符,如果len省略,则删除Pos位置开始到结尾


(3)append和replace、assign函数

 s.assign(args)  将s中的字符串替换为args指定的字符,返回一个指向s的引用;

 s.append(args) 将args追加到s中,返回一个指向s的引用;

 s.replace(range,args) 删除s中range范围内的元素,替换为args中的字符,返回一个指向s的引用

注: range为一个下标,或者一对指向迭代器范围;

args可以为下列形式:

str  字符串str

str,pos,len     str从pos开始最多len个字符

cp,len       字符数组前len个字符

cp                 cp指向以空字符结尾的字符数组

n,c                n个字符c

b,e                迭代器b和e指定的范围内的字符

 (4)string搜索操作

 (5)数值转换  有两个非常重要的函数

   atoi   将字符串转换成整数          使用函数atoi必须要注意,它的形参为字符指针形,比如string s; int num =atoi(s.c_str()); 这样才是正确的

   to_string 将整数转换为字符串

三、

1、注意:寻找字符串中的某个字符,和寻找容器中的某个值,find函数的形参是不一样的

(1)寻找某个字符在字符串中的位置      

如果找到,返回下标,否则返回-1

const string helper1 = "0123456789abcdefABCDEF";
const string helper2 = "084C2A6E195D3B7F5D3B7F";

string str="abcdef";

for(int i=0;i         int n = helper1.find(str[i]);
            if(n != -1)
                str[i] = helper2[n];
    }

(2)寻找某个值在容器中第一个该值所在的位置

vector result={1,2,3,4,5,6,7,8,9};

int num=8;

auto b= result.find(reslut.begin(),result.end(),num); //寻找值num在容器result中的位置,返回迭代器,若容器中不存在该值,则会返回尾后迭代器reslut.end()

if(b==reslut.end())

//说明容器中不存在该值

else

//容器存在该值

2、关于标准输入输出流的使用,sstream

string line,str;

        while(getline(cin,line)){

istringstream str_read(line);

while(str_read>>str){

cout<

}

cout<

}

3、华为字符加密这道题目,使用find函数,找到返回字符位置,未找到返回-1

     关于replace函数的使用  str.replace(start_pos,len,s)   start_pos为起始位置,len为要替换的长度,s为要替代的字符串

      举例:  string s="abcdefghijklm";      string str=yuhuai ;   s.replace(0,str.size(),str);   cout<

4、




你可能感兴趣的:(C++知识点总结)