首页 > 试题广场 >

字符串操作

[编程题]字符串操作
  • 热度指数:11899 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定长度为 n 的只含小写字母的字符串 s,以及正整数 m 次操作。
\hspace{15pt}每次操作给定两个整数 \ell,r 和两个小写字母 c_1,c_2;将字符串 s 在区间 [\ell,r] 内的所有字符 c_1 替换为 c_2
\hspace{15pt}按顺序执行完所有操作后,输出最终的字符串。

输入描述:
\hspace{15pt}在一行输入两个整数 n,m \left(1 \leqq n,m \leqq 100\right)
\hspace{15pt}接下来一行输入一个只含小写字母的字符串 s,长度为 n
\hspace{15pt}再接下来 m 行,每行输入两个整数 \ell,r 和两个字符 c_1,c_2,用空格分隔,其中 1 \leqq \ell \leqq r \leqq nc_1,c_2 为小写字母。


输出描述:
\hspace{15pt}输出一个只含小写字母的字符串,表示执行完所有操作后的最终字符串。
示例1

输入

5 3
wxhak
3 3 h x
1 5 x a
1 3 w g

输出

gaaak

说明

\hspace{8pt}\bullet\,初始字符串为 `wxhak`; 
\hspace{8pt}\bullet\,第 1 次操作将位置 3 上的 `h` 替换为 `x`,得到 `wxxak`;
\hspace{8pt}\bullet\,第 2 次操作将位置 1 至 5 的 `x` 替换为 `a`,得到 `waaak`;
\hspace{8pt}\bullet\,第 3 次操作将位置 1 至 3 的 `w` 替换为 `g`,得到 `gaaak`。

备注:

#include <stdio.h>

int main(){
    int n, count, l, r;
    char a, b, arr[100];;
    scanf("%d %d", &n, &count);
    scanf("%s", arr);
    while(count--){
        scanf("%d %d %c %c", &l, &r, &a, &b);
        for(int i = l-1; i <= r-1; i++){
            if(arr[i] == a)
                arr[i] = b;
        }
    }
    printf("%s", arr);
    return 0;
}

发表于 2022-06-15 00:57:50 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,m;
    cin>>n>>m;
    string s;
    cin>>s;
    for(int i=0;i<m;i++) {
        int l,r;
        char c1,c2;
        cin>>l>>r>>c1>>c2;
        for(int j=l-1;j<r;j++){
            if(s[j]==c1) s[j]=c2;
        }
    }
    cout<<s<<endl;
    return 0;
}

发表于 2025-08-16 15:09:04 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int length = in.nextInt();
        int round = in.nextInt();
        String str = in.next();
        for (int i = 1; i <= round; i++) {
            int start = in.nextInt() - 1;
            int end = in.nextInt() - 1;
            String oldLetter = in.next();
            String newLetter = in.next();

            str = str.substring(0, start) + str.substring(start, end + 1).replace(oldLetter,
                    newLetter) + str.substring(end + 1);
        }
        System.out.print(str);

    }
}

发表于 2025-07-30 15:31:35 回复(0)
#include <stdio.h>

int main() {
    int n,m=0;
    scanf("%d %d",&n,&m);
    char s[100]={0};
    scanf("%s",&s);
    int l,r=0;
    char c1,c2;
    for(int i=0;i<m;i++){
        scanf("%d %d %c %c",&l,&r,&c1,&c2);
        for(int j=l-1;j<r;j++){
            if(s[j]==c1){
                s[j]=c2;
            }
        }
    }
    printf("%s",s);
    return 0;
}

发表于 2024-02-11 19:14:40 回复(0)
#include<stdio.h>
int main() {
    int n, m, l, r;
    scanf("%d %d", &n, &m);
    char str[100] = {0}, c1, c2;
    scanf("%s", str);
    while (m--) {
        scanf("%d %d %c %c", &l, &r, &c1, &c2);
        for (int j = l - 1; j <= r - 1; j++)
            if (str[j] == c1)
                str[j] = c2;
    }
    printf("%s\n", str);
    return 0;
}

发表于 2022-08-09 16:33:35 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, l, r;
    string s;
    cin >> n >> m >> s;
    char c1, c2;
    for (int i = 0; i < m; ++i) {
        cin >> l >> r >> c1 >> c2;
        for (int j = l - 1; j <= r - 1; ++j) {
            if (s[j] == c1) s[j] = c2;
        }
    }
    cout << s << endl;
    return 0;
}

发表于 2022-03-31 13:13:23 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();   //n是字符串长度
        int m = in.nextInt();   //m是操作的次数
        in.nextLine();   //消除缓冲区的换行符
        String str = in.nextLine(); //str是输入字符串
        String result=""; //result记录输出字符串
        for(int i=0;i<m;i++){
            //a是左区间下标 b是右区间下标 c是被替换的字符 d是替换后的字符
            int a = in.nextInt()-1;
            int b = in.nextInt()-1;
            char c = in.next().charAt(0);
            char d = in.next().charAt(0);
            //把字符串转换成字符数组进行操作
            char[] chars = str.toCharArray();
            //替换字符
            for(int j=a;j<=b;j++){
                if(chars[j]==c){
                    chars[j]=d;
                }
            }
            //*****更新字符串 *******
            str = new String(chars);
        }
        System.out.println(str);
    }
}
发表于 2025-10-25 15:20:08 回复(0)
#include<bits/stdc++.h>
using namespace  std;
int main(){
    int n,m;
    cin>>n>>m;
    getchar();
    string s;
    cin>>s;
    while(m--){
        int l,r;
        char c1,c2;
        cin>>l>>r>>c1>>c2;
        for(int i=l-1;i<=r-1;i++){
            if(s[i]==c1){
                s[i]=c2;
            }
        }
    }
    cout<<s;
    return 0;
}
发表于 2025-10-21 22:53:48 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    
    char s[101]; // 字符串长度不超过100
    scanf("%s", s);
    
    for (int i = 0; i < m; i++) {
        int l, r;
        char c1, c2;
        // 读取操作参数(注意空格分隔,需正确接收字符)
        scanf("%d %d %c %c", &l, &r, &c1, &c2);
        
        // 遍历区间[l-1, r-1](下标从0开始)
        for (int j = l - 1; j <= r - 1; j++) {
            if (s[j] == c1) {
                s[j] = c2;
            }
        }
    }
    
    printf("%s\n", s);
    return 0;
}
发表于 2025-10-19 22:23:01 回复(0)
#include <iostream>
#include <string>
using namespace std;
int main() 
{
    int n,m,l,r;
    char c1, c2;
    cin >> n >> m;
    string str;
    cin >> str;
    for (int i = 1; i <= m; i++)
    {
        cin >> l >> r >> c1 >> c2;
        for (int j = l-1; j <= r-1; j++)
        {
            if (str[j] == c1) str[j]=c2;
        }
    }
    for (int i = 0; i < n; i++)
    {
        cout << str[i];
    }
    return 0;
}//异常简单
发表于 2025-10-14 13:42:32 回复(0)
#include <iostream>
#include <string>
using namespace std;

int main() {
    int n,m;
    cin>>n>>m;
    string s ;
    cin>>s;

    for (int i=0; i<m; i++) {
        int a1,a2;
        cin>>a1>>a2;
        char c1,c2;
        cin>>c1>>c2;
        for (;a1<=a2 ; a1++) {
            if (s[a1-1]==c1) {
                s[a1-1]=c2;
            }
        }
    }
    cout<<s;
}
// 64 位输出请用 printf("%lld")
发表于 2025-09-29 23:30:21 回复(0)
n, m = map(int, input().split())
s = list(input().strip())
for _ in range(m):
    a,b,c,d=input().split()
    for i in range(int(a)-1, int(b)):
        if s[i] == c:
           s[i] = d
print(''.join(s))

发表于 2025-09-29 15:11:35 回复(0)
# 输入两个数,第二个是操作次数 a
_, a = map(int, input().split())

# 输入初始字符串
aaa = input()

# 转为列表,方便修改单个字符
aaa_list = list(aaa)

for _ in range(a):
    # 输入 q, w, e, r (注意:q 和 w 是 1-based 的起始和结束位置,e 和 r 是字符)
    q, w, e, r = input().split()
    left = int(q) - 1     # 转为 0-based
    right = int(w) - 1    # 转为 0-based
    
    # 遍历区间 [left, right],逐个检查并替换
    for j in range(left, right + 1):  # 注意:包含 right,所以是 right + 1
        if aaa_list[j] == e:
            aaa_list[j] = r

# 最后将列表转回字符串输出
print(''.join(aaa_list))

发表于 2025-09-05 21:57:46 回复(0)
n,m = list(map(int,input().split(' ')))
nmvalid = 0
if n >=1 and n<=100 and m >=1 and m<=100:
    nmvalid = 1
s = input()
slenValid = 0
if len(s) == n:
    slenValid = 1
sList = []
for i in range(len(s)):
    sList.append(s[i])
lList = []
rList = []
c1List = []
c2List = []
lrc1c2valid = 1
for i in range(m):
    tmp = list(input().split(' '))
    lList.append(int(tmp[0]))
    rList.append(int(tmp[1]))
    c1List.append(tmp[2])
    c2List.append(tmp[3])
    if not(int(tmp[0])<=int(tmp[1]) and ((tmp[2].isalpha() and tmp[2].islower()) and (tmp[3].isalpha() and tmp[3].islower()))):
        lrc1c2valid = 0
   

if (nmvalid and slenValid) and lrc1c2valid:
    for i in range(m):
        for j in range(lList[i]-1,rList[i]):
            if sList[j] == c1List[i]:
                # tmp =
                sList[j] = c2List[i]   #替换
    tmp = ''.join(sList)
    print(tmp)

发表于 2025-09-05 14:45:24 回复(0)
n, m = map(int, input().split())
s = list(input())

for i in range(m):
    l,r,c1,c2 = map(str, input().split())
    l = int(l)
    r = int(r)
    if l == r:
        if s[l-1] == c1:
            s[l-1] = c2
    elif l <= r and r<=n:
        for j in range(l-1,r):
            if s[j] == c1:
                s[j] = c2
    else:
        continue
print(''.join(s))
           
发表于 2025-08-24 20:23:31 回复(0)
n, m = map(int, input().split())
s = input()
for _ in range(m):
    a = ''
    l, r, c1, c2 = input().split()
    for i in range(n):
        if (i in range(int(l)-1, int(r))) and s[i] == c1:
            a += c2
        else:
            a += s[i]
    s = a
print(a)
发表于 2025-08-19 16:47:06 回复(0)
n,m=input().split()
s=list(input())
for __ in range(int(m)):
    l,r,c1,c2=input().split()
    for i in range(int(l)-1,int(r)):
        if s[i]==c1:
            s[i]=c2    
print(''.join(s))
发表于 2025-08-12 13:47:50 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n, m;
    string in;
    cin >> n >> m >> in;

    int x,y;
    char a,b;

    char c = 'a';

    for(int i=0;i<m;i++){
        cin >> x >> y>> a >> b;
        for(int j=x;j<=y;j++)
        {
            if(in[j-1] == a)
            {
                in[j-1] = b;
            }
        }
    }
    cout << in;
}

发表于 2025-07-18 10:42:42 回复(0)
先转换为0-base索引后在区间[l,r+1]中遍历替换即可。
import sys

n,m = map(int, input().split())
s= list(input())

for _ in range(m):
    l,r,c1,c2 = input().split()
    l = int(l) - 1
    r = int(r) - 1
    for i in range(l,r+1):
        if s[i] == c1:
            s[i] = c2

print(''.join(s))

发表于 2025-07-15 10:33:37 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            int m = in.nextInt();
            in.nextLine();
            String a = in.nextLine();
            char[] str = a.toCharArray();
            for(int i = 0;i < m;i++)
            {
                int l = in.nextInt();
                int r = in.nextInt();
                char c1 = in.next().charAt(0);
                char c2 = in.next().charAt(0);
                in.nextLine();
                for(int j = l - 1;j <= r - 1;j++)
                {
                    if(str[j] == c1)
                    {
                        str[j] = c2;
                    }
                }
               
            }
            for(int k = 0;k < str.length;k++){System.out.printf("%c",str[k]);}
        }
    }
}
发表于 2025-07-09 17:12:52 回复(0)

问题信息

上传者:牛客301599号
难度:
60条回答 2731浏览

热门推荐

通过挑战的用户

查看代码
字符串操作