【C++笔记】字符串的认识与基本函数

目录

字符串认识

字符串查找函数

字符串截取函数

字符串比较函数

字符串插入函数

字符串删除函数

字符串替换函数

字符串认识

1.字符串变量string s;
字符串变量是一个一个字符变量连起来,末尾以\0结尾。每一个字符变量叫做字符串变量的元素,即s[i];
2.字符串的长度:
(1).获取长度:s.size();s.length();
(2).字符串元素s[i]的下标范围:0~s.size()-1;
3.字符串s输入:
(1)没有空格: cin>>s;
(2)有空格:  getline(cin,s);
        getline(cin,s,'#'); //自定义输入结束符号为#号
(3)getchar()获取一个字符;
        如果使用cin,再使用getline(cin,s);需要中间添加getchar()消耗掉cin后的换行符号;
4.翻转字符串s:
reverse(s.begin(),s.end());
5.统计s中字母s[]的个数:
count(s.begin(),s.end(),s[i]);

例题:字符串倒序输出
描述:
给定一个字符串,然后将字符串倒序输出。
输入描述:
输入一个字符串 S(2<strlen(S)<100)
输出描述:
将字符串S倒序输出。
用例输入:
reverse
用例输出:
esrever

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
    getline(cin,s);
    reverse(s.begin(),s.end());
    cout<<s;
    return 0;
}

字符串查找函数

1.查找字符串s中的第一个子串s1:
  int pos=s.find(s1);
2.从下标a开始查找字符串s中的第一个子串s1:
  int pos=s.find(s1, a);
3.查找字符串s中的最后一个子串s1:
  int pos=s.rfind(s1);
若字符串s中有子串s1,返回值为子串s1的位置,否则返回值为"-1";

例题:统计字符个数
描述:
编程统计输入句子中出现“lanqiao”字样的个数。(注意,“lanqiao”字样可以是不同大小写字母的组合,例如:LanQIAO、LanQiao 等)
输入描述:
输入一个字符串(0≤字符串长度≤100)。
输出描述:
输出该字符串中“lanqiao”字样出现的次数。(注意:“lanqiao”字样可以是不同大小写字母的组合)
用例输入:
Lanqiaoqingshao, lanqiaojingsai, Lanqiaoceping.
用例输出:
3

#include<bits/stdc++.h>
using namespace std;
int main(){
    int cnt=0;
	string s;
    getline(cin,s);
    for(int i=0;i<s.size();i++)
        s[i]=tolower(s[i]);
    int pos=s.find("lanqiao");
    while(pos!=-1){
        cnt++;
        pos=s.find("lanqiao",pos+1);
    }
    cout<<cnt<<endl;
    return 0;
}

字符串截取函数

从字符串s的下标i截取长度为len的一个子串s1:
  string s1=s.substr(i,len);

例题:删除单词后缀
描述:
给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否则不进行任何操作。
输入描述:
输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为32)。
输出描述:
输出按照题目要求处理后的单词。
用例输入:
referer
用例输出:
refer

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
    cin>>s;
    int len=s.size();
    if(s=="er"||s=="ly"||s=="ing")
        cout<<s<<endl;
    else if(s.rfind("ing")==len-3)
        cout<<s.substr(0,len-3)<<endl;
    else if(s.rfind("er")==len-2||s.rfind("ly")==len-2)
        cout<<s.substr(0,len-2)<<endl;
    else
        cout<<s<<endl;
    return 0;
}

字符串比较函数

比较两个字符串s1,s2的大小:
  int a=s1.compare(s2);
compare()函数返回一个整数值,表示两个字符串的相对顺序;
如果s1<s2,返回值为-1;如果s1=s2,返回值为0;如果s1>s2,返回值为1;


字符串插入函数

将子串s1插入到字符串s,i表示插入的下标位置,s1表示要插入的子串:
  s.insert(i, s1);
例题:墓碑上的字符
描述:
考古学家发现了一座千年古墓,墓碑上有神秘的字符。经过仔细研究,发现原来这是开启古墓入口的方法。 墓碑上有2行字符串,其中第一个串的长度为偶数,现在要求把第2个串插入到第一个串的正中央,如此便能开启墓碑进入墓中。
输入描述:
输入数据首先给出一个整数n,表示测试数据的组数。 然后是n组数据,每组数据2行,每行一个字符串,长度大于0,小于50,并且第一个串的长度必为偶数。
输出描述:
请为每组数据输出一个能开启古墓的字符串,每组输出占一行。
用例输入:                     用例输出: 

2                     HELLOWORLD 
HELRLD                WLHCLUB
LOWO
WB
LHCLU
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    while(n--){
        string s1,s2;
        cin>>s1>>s2;
        int pos=s1.size()/2;
        s1.insert(pos,s2);
        cout<<s1<<endl;
    }
    return 0;
}

字符串删除函数

从字符串s的下标i删除长度为len的子串:
  s.erase(i,len);

例题:删除指定子串
描述:
输入两个字符串s1和s2,确保s2长度小于s1,如果s1中有一段子串与s2相同,则删除该段子串并输出,如果没有,则输出s1;
用例输入1:                                        用例输出1:

I am a student                    I am a ent
stud

用例输入2:                                         用例输出2:

you are a teacher                 you are a teacher
am
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    int pos=s1.find(s2);
    if(pos!=-1){
        int len=s2.size();
        s1.erase(pos,len);
    }
    cout<<s1<<endl;
    return 0;
}

字符串替换函数

将字符串s中的子串s1替换为s2:
调用替换方法(先找到s1的位置,再测量s1的长度,替换为s2)
  s.replace(s.find(s1),s1.size(),s2);

例题:查找子串并替换
描述:
对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串)。
比如:将“abcf  abdabc”中的“abc”,替换为“AA”,则替换结果为“AAf  abdAA”,而将“abcf  abdabc”中的“abc”替换为“abcabc”,则替换结果为“abcabcf  abdabcabc”。本题查找子串时注意,大小写完全一致,才能作为子串,比如:在“Abcf abd Abc”中,如果找字符串“abc”是不存在的。
注意,三个字符串中可能都存在空格。第一个字符串的长度最大为10^8
输入描述:
第一行为原来的字符串;
第二行为要查找的子串;
第三行为要替换成的子串。
输出描述:
只有一行,为替换好的字符串
用例输入:                                               用例输出:

abcf  abdabc                         AAf abdAA
abc
AA
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s,s1,s2;
    getline(cin,s);
    getline(cin,s1);
    getline(cin,s2);
    int pos=s.find(s1);
    while(pos!=-1){
    	s.replace(pos,s1.size(),s2);
        pos=s.find(s1,pos+s2.size());
    }
    cout<<s<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值