C++||STL||string

本文详细介绍了C++中字符串的各种操作方法,包括构造、长度获取、元素访问与修改、比较、内容修改、输入输出及查找等功能。通过实例展示了如何使用string类进行高效字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string类的构造:

#include <iostream>
#include <stdio.h>
#include <string> //头文件
using namespace std;
int main()
{
    char str[] = "abcdefgh";
    string s ("0123456789");
    string s1; //定义空字符串
    string s2 (s); //构造函数,全部复制
    string s3 (s, 2, 5); //构造函数,从字符串s的第2个元素开始,复制5个元素,赋值给s2
    string s4 (str, 5); //将字符串str的前5个元素赋值给s4
    string s5 (5, 'x'); //将5个'x'组成的字符串'xxxxx'赋值给s5
    string s6 (s.begin(), s.end()); //复制字符串s的所有元素,并赋值给s6
    cout << s << endl;
    cout << s1 << endl;
    cout << s2 << endl;
    cout << s3 << endl;
    cout << s4 << endl;
    cout << s5 << endl;
    cout << s6 << endl;
}

字符串的长度

cout << s.length() << endl;
cout << s.max_size() << endl;

获取字符串指定位置元素直接使用下标即可
对指定位置字符进行修改

while(scanf("%d",&n)!=EOF){
     char *p =&s[n]; //建立引用关系
     *p='Y'; //修改内容
     cout << s << endl;
}

字符串比较可以使用compare,若参与比较的两个串值相同,则函数返回 0;若字符串 S 按字典顺序要先于 S2,则返回负值;反之,则返回正值。

int main()
{
    char str[]="0123456789";
    string s(str);
    string s2 (s); //构造函数,全部复制
    cout << s.compare(0,9,s2,0,9) << endl;
}

也可以直接使用比较运算符,包括>、<、==、>=、<=、!=。
字符串内容的修改:
assign()函数:
使用 assign() 函数可以直接给字符串赋值。该函数既可以将整个字符串赋值给新串,也可以将字符串的子串赋值给新串。

int main()
{
    string str("0123456789");
    string s;
    s.assign (str); //直接全部赋值
    s.assign (str, 3, 4); //从str的第3个位置开始赋值长度为4的子串
    s.assign (str, 2, str.npos); //赋值给从位置2至末尾的子串
    s.assign (5, 'X'); //重复5个'X'字符
    s.assign (str.begin(), str.end()); //赋值给从开头到末尾的串
}
erase()函数:
s.erase(3,4); //删除字符串中从位置3开始长度为4的子串

swap()函数:

s.swap(str); //用字符串str替换s

insert()函数:

int main()
{
    string a("0123456789");
    string b;
    b.insert(0,"abcd"); //从0位置开始插入字符串
    b.insert(4,"abcdefgh", 4); //从4位置开始插入长度为4的字符串,超出部分不插入
    b.insert(0,a,2,3); //从2位置开始把字符串a中从2位置开始长度为3的子串插入b中
    b.insert(0, 5, 'c'); //从0位置开始插入5个'c'
}
append()函数:
int main()
{
    string a("0123456789");
    string b("00");
    b.append(a); //把字符串a插入到b中,从b串尾部插
    b.append("abcd", 3); //在b串尾部插入"abcd"的前三个字符
    b.append("abcd", 1, 3); //在b串尾部插入"abcd"的1位置到3位置的子串
    b.append(10, 'a'); //在字符串尾部插入10个'a'
}

字符串的输入与输出:
getline()函数:
该函数可将整行的所有字符读到字符串中。在读取字符时,遇到文件结束符、分界符、回车符时,将终止读入操作,且文件结束符、分界符、回车符在字符串中不会保存;当已读入的字符数目超过字符串所能容纳的最大字符数时,将会终止读入操作。

int main()
{
    string a;
    string b;
    getline(cin, a); //以回车作为结束输入标志
    getline(cin, b, ' '); //以空格作为结束输入标志
    cout << a <<endl;
    cout << b <<endl;
}

字符串查找:
若查找 find() 函数和其他函数没有搜索到期望的字符(或子串),则返回 npos;若搜索成功,则返回搜索到的第 1 个字符或子串的位置。其中,npos 是一个无符号整数值,初始值为 -1。当搜索失败时, npos 表示“没有找到(not found)”或“所有剩佘字符”。
find()函数:

int main()
{
    int pos;
    string s("01234434556789");
    string t("012");
    pos = s.find('3' , 0); //在串s中从下标0开始搜索'3'的位置,找到则返回所在位置下标,否则返回-1
    pos = s.rfind('3' , 4); //在串s中从下标4开始向左查找'3'的位置,找到则返回所在位置下标,否则返回-1
    pos = s.find("345", 0); //从串s下标为0的位置开始查找子串,找到则返回第一次出现的位置,否则返回-1
    pos = s.find("345" , 0, 3); //第1个参数是被搜索的字符串,第2个参数是源串中开始搜索的下标,第3个参数是关于第1个参数的字符
    pos = s.find(s,0); //第1个参数是被搜索的字符串,第2参数是在源串中开始搜索的下标位置
}

find_first_of()函数和 find_last_of()函数:
find_first_of() 函数可实现在源串中搜索某字符串的功能,该函数的返回值是被搜索字符串的第 1 个字符第 1 次出现的下标(位置)。若查找失败,则返回 npos。

find_last_of() 函数同样可实现在源串中搜索某字符串的功能。与 find_first_of() 函数所不同的是,该函数的返回值是被搜索字符串的最后 1 个字符的下标(位置)。若查找失败,则返回 npos。

find_first_not_of()函数和 find_last_not_of()函数:
find_first_not_of() 函数可实现在源字符串中搜索与指定字符(串)不相等的第 1 个字符;find_last_not_of() 函数可实现在源字符串中搜索与指定字符(串)不相等的最后 1 个字符。这两个函数的参数意义和前面几个函数相同,它们的使用方法和前面几个函数也基本相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值