C++标准库中Strings字符串使用

本文详细介绍了C++标准库中字符串的使用方法,包括构造与析构、字符串操作、大小与容量、元素存取、搜寻函数等内容。同时,还探讨了迭代器操作函数及其应用场景。

C++标准库中Strings字符串使用

  • 字符串操作函数

    构造函数:产生或复制字符串
    析构函数:销毁字符串
    =,assign():赋以新值
    swap():交换两个字符串的内容
    +=,append(),push_back():添加字符
    insert():插入字符
    erase():删除字符
    clear():移除全部字符(使之为空)
    resize():改变字符数量(在尾端删除或添加字符)
    replace():替换字符
    +:串联字符串
    ==,!=,<,<=,>,>=,compare():比较字符串内容
    size(),length():返回字符数量
    max_size():返回字符的最大可能个数
    empty():判断字符串是否为空
    capacity():返回重新分配之前的字符容量
    reverse():保留一定量内存以容纳一定数量的字符
    [],at():存取单一字符
    >>,getline():从stream中读取某值
    <<:将某值写入stream
    copy():将内容复制为一个C-string
    c_str():将内容以C-string形式返回
    data():将内容以字符数组(character array)形式返回
    substr():返回某个子字符串(substring)
    搜寻函数(find functions):搜寻某个字符串或字符
    begin(),end():提供正常的(正向)迭代器支持
    rbegin(),rend():提供逆向迭代器支持
    get_allocator():返回配置器(allocator)

  • 字符串操作参数

    const string & str:整个str字符串
    const string & str,size_type idx,size_type num:大部分情况下指字符串str中以idx开始的num个字符
    const char* cstr:整个C-string cstr
    const char* chars,size_type len:字符数组chars中的len个字符
    char c:字符c
    size_type num,char c:num个字符c
    iterator beg,iterator end:区间[beg; end]内所有字符

  • 字符串中未提供功能

    正则表达式
    文本处理(如大写化、大小写不计的字符串比较动作等

  • 构造和析构函数

    string s:生成一个空字符串s
    string s(str):copy构造函数,生成字符串str的一个复制品
    string s(str, stridx):将字符串str内“始于位置stridx”的部分,当做字符串s的初值
    string s(str, stridx, strlen):将字符串str内“始于位置stridx且长度顶多strlen”的部分,当做字符串s的初值
    string s(cstr):以C-string cstr作为字符串s的初值
    string s(chars, chars_len):以C-string cstr的前chars_len个字符串作为字符串s的初值
    string s(num, c):生成一个字符串,包含num个c字符
    string s(beg, end):以区间[beg; end]内的字符作为字符串s的初值
    s.~string():销毁所有字符,释放内存

  • 字符串转字符数组C-string

    data():以字符数组的形式返回字符串内容。由于并未追加’\0’字符,所以返回型别并非有效的C-string
    c_str():以C-string形式返回字符串内容,也就是在尾端添加’\0’字符
    copy():将字符串内容复制到“调用者提供的字符数组”中。不添加’\0’字符
    注意:data()和c_str()返回的字符数组由该字符串拥有。即调用者不可修改它或释放其内存。

  • 大小和容量

    size()和length():返回string中现有的字符个数。empty()用来检测字符数是否为0,即字符串是否为空。应优先使用empty()函数,它比length()和size()快。
    max_size():返回一个string最多能够包含的字符数。返回值一般是索引型别的最大值减1。减1的原因:最大值本身是npos;在实作中,内部缓冲区之后添加一个’\0’操作,以便于C-string使用。一旦某个操作函数使用一个长度大于max_size()的string,length_error异常就会抛出。
    capacity():重新分配内存之前,string所能包含的最大字符数。

    让string拥有足够的容量很重要:
    1)重新分配会造成所有指向string的references、pointers和iterators失效;
    2)重新分配很耗时。

  • 元素存取

    operator[]:并不检查索引是否有效,at()则会检查。如果调用at()时指定的索引无效,系统会抛出out_of_ranage异常。
    对于operatorp[]的const版本,最后一个字符的后面位置也是有效的。

  • 以下操作将导致字符的references和pointers失效

    以swap()交换两值
    以operator>>()或getline()读入新值
    以data()或c_str()输出内容
    调用operator[],at(),begin(),rbegin(),end()或rend()之外的任何non-const成员函数
    调用任何函数并于其后跟着operator[],at(),begin(),rbegin(),end()或rend()。

  • 搜寻函数

    find():搜寻第一个与value相等的字符
    rfind():搜寻最后一个与value相等的字符(逆向搜寻)
    find_first_of():搜寻第一个“与value中的某值相等”的字符
    find_last_of():搜寻最后一个“与value中的某值相等”的字符
    find_first_not_of():搜寻第一个“与value中任何值都不相等”的字符
    find_last_not_of():搜寻最后一个“与value中任何值都不相等”的字符
    参数如下:
    const string& value:搜寻对象为value(一个string)
    const string& value, size_type idx:从*this的idx索引位置开始,搜寻value(一个string)
    const char* value:搜寻value(一个C-string)
    const char* value, size_type idx, size_type value_len:从*this的idx索引位置开始,搜索value(一个C-string)内的前value_len个字符所组成的字符区间。value内的null字符(’\0’)将不复特殊意义。
    const char value:搜寻value(一个字符)
    const char value, size_type idx:从*this的idx索引位置开始,搜寻value(一个字符)。

  • 迭代器操作函数

    s.begin():返回一个随机存取迭代器,指向第一个字符
    s.end():返回一个随机存取迭代器,指向最后一个字符的下一个位置
    s.rbegin():返回一个逆向迭代器,指向倒数第一个字符(亦即最后一个字符)
    s.rend():返回一个逆向迭代器,指向倒数最后一个字符的下一个位置(亦即第一个字符的前一个位置)
    string s(beg, end):以区间[beg; end]内的所有字符作为string s的初值
    s.append(beg, end):将区间[beg; end]内的所有字符添加与s尾部
    s.assign(beg, end):将区间[beg; end]内的所有字符赋值给s
    s.insert(pos, c):在迭代器pos所指之处,插入字符c,并返回新字符的迭代器位置
    s.insert(pos, num, c):在迭代器pos所指之处插入num个字符c,并返回第一个新字符的迭代器位置
    s.insert(pos, beg, end):在迭代器pos所指之处插入区间[beg; end]内的所有字符
    s.erase(pos):删除迭代器pos所指字符,并返回下一个字符位置
    s.erase(beg, end):删除区间[beg; end]内的所有字符,并返回下一个字符的下一个位置
    s.replace(beg, end, str):以string str内的字符替代[beg; end]区间内的所有字符
    s.replace(beg, end, cstr):以C-string str内的字符替代[beg; end]区间内的所有字符
    s.replace(beg, end, cstr, len):以字符数组str的前len个字符替代[beg; end]区间内的所有字符
    s.replace(beg, end, num, c):以num个字符c替代[beg; end]区间内的所有字符
    s.replace(beg, end, newBeg, newEnd):以[newBeg, newEnd]区间内的所有字符替代[beg; end]区间内的所有字符

参考文献:C++标准库

strings.com 是强大的纯DOS环境 下的文本处理工具 STRINGS常用方法: 1、把文本文件 LIST.TXT 包含的行数赋值给变量 LN STRINGS LN=LINESIZE LIST.TXT 2、把文本文件 LIST.TXT 的大小传递给变量FS STRINGS FS=FILESIZE LIST.TXT 3、读取文本文件 LIST.TXT 的第5行内容并赋值给变31333137量 LN STRINGS LN=READ LIST.TXT,5 4、把变量 N 在原有基础上+1 和 -1 STRINGS N=ADD %N%,1 STRINGS N=SUB %N%,1 5、把字符串 ABCDEFG 中第四个字符以及后面共3个字符传递给变量 LX (DEF) STRINGS LX=MID ABCDEFG,4,3 6、查找字符串 ABCDEFG 中D所在的位置并赋值给变量DX,如果没找到DX=0 STRINGS DX=FIND ABCDEFG,D 7、找出字符串 ABCD EFG HIJ KLMN 中第二个单词并赋值给变量L2 STRINGS L2=PARSE ABCD EFG HIJ KLMN ,2 应用举例:逐一显示文件 LIST.TXT 各行内容 @ECHO OFF REM 读取LIST.TXT大小如果是0就入 ERROR段 STRINGS FS=FILESIZE LIST.TXT IF %FS%*==0* GOTO ERROR REM 读取 LIST.TXT 行数 并用N作计数器以循环方式显示 LIST.TXT各行内容。 STRINGS L=LINESIZE LIST.TXT STRINGS L=ADD %L%,1 SET N=0 :LOOP STRINGS N=ADD %N%,1 STRINGS LX=READ LIST.TXT,%N% ECHO %LX% IF %N%*==%L%* GOTO END GOTO LOOP :ERROR ECHO LIST.TXT IS NULL :END SET FS= SET L= SET N= SET LX= --------------------------------------------- NSET 的常用方法: 1、把某一命令的执行结果传递给变量。 A.把 DIR 命令执行结果第7行中的第2个单词传递给变量 DIRX DIR /A /S |NSET /L7 DIRX=$2 B.把当前路径传递给变量 CDX CD |NSET CDX=$0 2、获取 LIST.TXT 文件第5行第2个单词的内容并赋值给变量 L52 NSET /L5 L52=$2 <LIST.TXT 举例:显示出 LIST.TXT 文件中第二个单词是 SYSTEM 的行的内容。 @ECHO OFF REM 读取LIST.TXT大小如果是0就入 ERROR段 STRINGS FS=FILESIZE LIST.TXT IF %FS%*==0* GOTO ERROR REM 读取 LIST.TXT 行数 并用N作计数器以循环方式显示 LIST.TXT中第二个单词是 REM SYSTEM 的行的内容,每找到一个符合条件的行,就把变量M在原有基础上+1。 STRINGS L=LINESIZE LIST.TXT STRINGS L=ADD %L%,1 SET N=0 SET M=0 :LOOP STRINGS N=ADD %N%,1 STRINGS LX=READ LIST.TXT,%N% REM STRINGS LX2=PARSE %LX%,2 NSET /L%N% LX2=$2 diskn.txt REM 如果存在DISKN2.TXT 就删除之 if exist diskn2.txt del diskn2.txt >nul REM 获取DISKN.TXT文件行数并用N做计数器逐行判断,并把需要的信息传递给DISKN2.TXT REM 如果该行前两个字符是 NO 说明没有硬盘,就退出脚本 RE
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值