GESP 四级冲刺训练营(1):字符串

一、基本常识

1. 功能函数

函数 格式 返回值 功能
length s.length() 字符串的长度 返回 s 的长度
find s1.find(s2, pos) 第一个字符的下标或者 string::npos 找到 s2s1 中第一个字符的下标
insert s1.insert(pos, s2) s1pos 下标位置前插入 s2
erase s.erase(pos, len) 删除 spos 下标位置开始往后的 len 个字符
replace s1.replace(pos, len, s2) 替换 s1pos 下标位置开始往后的 len 个字符替换为 s2
tolower tolower(c) 对应小写字符 c 变为对应的小写字符
toupper toupper(c) 对应大写字符 c 变为对应的大写字符
substr s.substr(pos, len) 截取的子字符串 截取 s1pos 下标开始往后的 len 个字符为子字符串
reverse s.reverse(it1, it2) sit1it2 进行翻转

2. 注意事项

  • insert() 在下标之前做插入操作;
  • tolower()toupper() 只能传入字符,不能传入字符串;
  • reverse() 传入的两个参数是迭代器,不是下标;
  • reverse() 使用前需要导入 algorithm 头文件。

3. 输入输出

前情提要:请在所有操作之前确保导入 string 头文件。

3.1 输入

// 无空格输入
string s;
cin >> s;

// 有空格输入
string s;
getline(cin, s);

3.2 输出

cout << s;

二、字符串算法

1. 基础字符串

1.1 回文字符串

题目描述

输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。

输入格式

输入一行字符串,长度小于 100 100 100

输出格式

如果字符串是回文,输出 yes;否则,输出 no

样例 #1

样例输入 #1

abcdedcba

样例输出 #1

yes

参考答案

方法①:函数求解

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string s;
string olds;

int main()
{
    
    cin >> s;
    olds = s;
    reverse(s.begin(), s.end());
    if (olds == s)
    {
    
        cout << "yes";
    }
    else
    {
    
        cout << "no";
    }
    return 0;
}

方法②:逻辑求解

#include <iostream>
#include <string>
using namespace std;

string s;
int len;

int main()
{
    
    cin >> s;
    len = s.length();
    for (int i = 0; i <= len/2; i++)
    {
    
        if (s[i] != s[len-i-1])
        {
    
             cout << "no";
             return 0;
        }
    }
    cout << "yes";
    return 0;
}

1.2 亲朋字符串

题目描述

亲朋字符串定义如下:给定字符串 s s s 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到第一个亲朋字符; s s s 的第二个字符加第三个字符得到第二个亲朋字符;依此类推。注意:亲朋字符串的最后一个字符由 s s s 的最后一个字符 ASCII 值加 s s s 的第一个字符的 ASCII 值。

输入格式

输入一行,一个长度大于等于 2 2 2,小于等于 100 100 100 的字符串。

输出格式

输出一行,为变换后的亲朋字符串。输入保证变换后的字符串只有一行。

样例 #1

样例输入 #1

1234

样例输出 #1

cege

参考答案

#include <iostream>
#include <string>
using namespace std;

string s;
int len;
string news;

int main()
{
    
    cin >> s;
    len = s.length();
    for (int i = 0; i < len; i++)
    {
    
        news += s[i]+s[(i+1)%len];
    }
    cout << news;
    return 0;
}

2. 尺取法求解

2.1 尺取法公式

尺取法一般的定义是:
l: 左指针
r: 右指针
s: 字符串
n: 字符串长度

while 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值