发现生活之美

6.3 C++修改字符串

参考:http://www.weixueyuan.net/view/6392.html

总结:

  string字符串同样可以像字符串数组那样按照下标逐一访问字符串中的每一个字符,string字符串的起始下标仍是从0开始。

  erase函数可以删除string类型变量中的一个子字符串。erase函数有两个参数,第一个参数是要删除的子字符串的起始下标,第二参数是要删除子字符串的长度,如果第二个参数不指名的话则是直接从第一个参数获取起始下标,然后一直删除至字符串结束。

  insert函数可以在string字符串中指定的位置插入另一个字符串,该函数同样有两个参数,第一个参数表示插入位置,第二参数表示要插入的字符串,第二个参数既可以是string变量,又可以是C风格的字符串。  

  replace函数可以用一个指定的字符串来替换string类型变量中的一个子字符串,该函数有三个参数,第一个参数表示待替换的子字符串的其实下标,第二个参数表示待替换子字符串的长度,第三个参数表示要替换子字符串的字符串。第三个参数同样可以是string类型变量或C风格字符串。

  swap函数可以用于将两个string 类型变量的值互换。

 

string字符串同样可以像字符串数组那样按照下标逐一访问字符串中的每一个字符,string字符串的起始下标仍是从0开始。

例1:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1 ;
    s1 = "1234567890";
    for(int i=0; i<s1.length(); i++)
        cout<<s1[i]<<" ";
    cout<<endl;
    s1[5] = '5';
    cout<<s1<<endl;
    return 0;
}

 

在本例中我们定义了一个string类型变量s1,并给该变量赋值"1234567890",之后用for循环逐一输出每一个字符串中的字符。除了能够访问每一个字符外,修改它们同样也是允许的,例如在程序后面s1[5] = '5'语句将第6个字符修改为’5’,最后s1被修改为了"1234557890"。

除了能够逐个的去访问字符串中每一个字符外,系统还提供了一些函数方便我们操作string类型变量。

erase函数可以删除string类型变量中的一个子字符串。erase函数有两个参数,第一个参数是要删除的子字符串的起始下标,第二参数是要删除子字符串的长度,如果第二个参数不指名的话则是直接从第一个参数获取起始下标,然后一直删除至字符串结束。

例2:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2, s3;
    s1 = s2 = s3 = "1234567890";
    s2.erase(5);
    s3.erase(5, 3);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    cout<< s3 <<endl;
    return 0;
}

 

程序最终运行结果:
1234567890
12345
1234590

当然,在使用erase函数时,在第一个参数没有越界的条件下,第二个参数可能会导致需要删除的子字符串越界,但实际上是不会的,函数会从以下两个值中取出一个最小值作为待删除子字符串的长度:
  • 第二个参数的实参值;
  • 字符串长度减去第一个参数的实参值。

其实说的简单一些,待删除字符串最多删除至字符串结尾。当然如果第一个参数直接越界了,那么函数执行会抛出异常的

函数insert可以在string字符串中指定的位置插入另一个字符串,该函数同样有两个参数,第一个参数表示插入位置,第二参数表示要插入的字符串,第二个参数既可以是string变量,又可以是C风格的字符串。

例3:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2, s3;
    s1 = s2 = "1234567890";
    s3 = "aaa";
    s1.insert(5, s3);
    cout<< s1 <<endl;
    s2.insert(5, "aaa");
    cout<< s2 <<endl;
    return 0;
}

 

本例最终运行结果:
12345aaa567890
12345aaa567890

insert函数的第一个参数同样有越界的可能,如果第一个参数越界,则函数会运行异常。

replace函数可以用一个指定的字符串来替换string类型变量中的一个子字符串,该函数有三个参数,第一个参数表示待替换的子字符串的其实下标,第二个参数表示待替换子字符串的长度,第三个参数表示要替换子字符串的字符串。第三个参数同样可以是string类型变量或C风格字符串。

例4:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2, s3;
    s1 = s2 = "1234567890";
    s3 = "aaa";
    s1.replace(5, 4, s3);
    cout<< s1 <<endl;
    s2.replace(5, 4, "aaa");
    cout<< s1 <<endl;  
    return 0;
}

 

程序运行结果如下:
12345aaa0
12345aaa0

同样的,该函数会有溢出的问题,如果第一个参数越界则会抛出异常。在第一个参数没有越界的前提下,第二个参数如果导致越界,则会选择以下两个值中的最小值作为待替换子字符串的长度:
  • 第二个参数的实参值;
  • 字符串长度减去第一个参数的实参值。

其实说白了,这个也就是说最多到字符串结尾的意思,这个与erase函数相同。

swap函数可以用于将两个string 类型变量的值互换,其使用方式见例5。

例5:
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1 = "string";
    string s2 = "aaaaaa";
    s1.swap(s2);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    return 0;
}

 

程序运行结果如下:
aaaaaa
string
 

posted on 2017-11-29 11:26  发现生活之美  阅读(543)  评论(0编辑  收藏  举报

导航