首页 > 试题广场 >

字符串操作

[编程题]字符串操作
  • 热度指数:8620 时间限制: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 <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)
n,m = map(int,('5 3'.split()))
s = 'wxhak' #字符串 p = [] for i in s:
    p.append(i) #把字符串放到列表里面 # print(m) for j in range(m):
    u = []
    a,b,c,d = input().split()
    e = p[int(a)-1:int(b)] # print(e)  for q in e: if q ==c:
            q = d
            u.append(q) else:
            u.append(q) # print(q)  # print(u)  u.reverse() # print(u)  del p[int(a)-1:int(b)] # print(p)  for i in u:
        p.insert(int(a)-1, i) for i in p: print(i,end='')
发表于 2025-06-11 10:48:57 回复(0)
# 读取数据
n,m = map(int,input().strip().split())

s = list(input().strip())

# 进行三次操作
for _ in range(m):
    star,end,s1,s2 = input().strip().split(" ")
    for i in range(int(star)-1, int(end)):
        if s[i] == str(s1):
            s[i] = str(s2)

print("".join(s))

发表于 2025-06-08 15:40:25 回复(0)
看到好多题解用string和%s来输入,但是自己写总是报错,请问是什么原因呢?
#include <stdio.h>
#include <string.h>

int main() {
    int n,m;
    scanf("%d %d\n",&n,&m);
    char str[n];
    for(int i=0;i<n;i++){
      scanf("%c",&str[i]);
    //scanf("%s",&str);这里这样写就会报错,看了调试字符串并没有被str完整接收
    }
    int l,r;
    char c1,c2;
    while(m--){
        scanf("%d %d %c %c\n",&l,&r,&c1,&c2);
        for(int i=l-1;i<r;i++){
            if(str[i]==c1){
                str[i]=c2;
            }
        }
    }
    for(int i=0;i<n;i++){
        printf("%c",str[i]);
    }
    //printf("%s",str);有些案例能通过,但是特别长的那个多打印了奇怪的符号
    return 0;
}

发表于 2025-03-08 01:30:33 回复(0)
#include<stdio.h>
#include <string.h>
int main()
{  
    int n = 0;
    int m = 0;
    char ch[100];
    int l = 0;
    int r = 0;
    char c1 = 0;
    char c2 = 0;
    scanf("%d %d\n",&n,&m);
    scanf("%s",ch);
    int i = 0;
    int j = 0;
    for(i=0;i<m;i++)
    {
        scanf("%d %d %c %c\n",&l,&r,&c1,&c2);
        for(j=l-1;j<=r-1;j++)
        {
            if(ch[j]==c1)
            {
                ch[j]=c2;
            }
        }
    } 
    int k = 0;
    for(k=0;k<n;k++)
    {
        printf("%c",ch[k]);
    }
    return 0;
}

发表于 2025-01-08 09:18:27 回复(0)
#include <stdio.h>

int main() {
    int chang, ci,zi1,zi2;char zifu[200]={},th1,th2;

    //获取长度和字符串
    scanf("%d%d",&chang,&ci);
    getchar();
    scanf("%s",zifu);
    //获取字符范围与需交换字符值
    for (int y=0; y<ci; y++) {
        scanf("%d%d %c %c",&zi1,&zi2,&th1,&th2);
        
        for (int x=zi1; x<=zi2; x++) {
            if (zifu[x-1]==th1) {
                zifu[x-1]=th2;
            }
        }
    }
    
    //输出操作玩的字符串
    printf("%s",zifu);
    return 0;
}

发表于 2024-10-25 12:56:47 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), m = in.nextInt();
        in.nextLine();
        StringBuilder str = new StringBuilder(
            in.nextLine()); //stringbuilder 可修改的字符串

        for (int i = 0; i < m; i++) {
            int l = in.nextInt(), r = in.nextInt();
            char c1 = in.next().charAt(0),
                 c2 = in.next().charAt(0); //替换和修改的字符
            for (int j = l - 1; j < r; j++) {
                if (str.charAt(j) == c1) {
                    str.setCharAt(j, c2); //重置该位置的字符
                }
            }
        }
        System.out.println(str);
    }
}

发表于 2024-09-19 00:47:29 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    char str[100];
    // for(int i = 0; i<n; ++i)
    // {
    //     scanf(" %c", &str[i]);
    // }
    getchar();
    gets(str);

    for(int i = 0; i<m; ++i)
    {
        int p, q;
        char c1, c2;
        scanf("%d %d %c %c", &p, &q, &c1, &c2);

        for(int j = p; j<=q; ++j)
        {
            if(str[j-1] == c1)
            {
                str[j-1] = c2;
            }
        }
    }

 
    // for(int i = 0; i<n; ++i)
    // {
    //     printf("%c", str[i]);
    // }
    puts(str);

    return 0;
}
这边注意那个输入有问题,前面有个回车键
发表于 2024-06-16 19:34:50 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() 
{
    int n , m, r, l;
    char c1, c2;
    int i = 0;
    char* p = NULL;

    scanf("%d%d", &n, &m);

    p = (char*)malloc(sizeof(char) * (n + 1));
    if(!p)
    {
        perror("malloc fail!");
        return 1;
    }
    scanf("%s", p);
    
    //进行m次后续操作
    for(i = 0; i < m; i++)
    {
        scanf("%d%d %c %c", &r, &l, &c1, &c2);
        //查找r到l中的c1
        while(r <= l)
        {
            //找到了,进行交换
            if(*(p + r - 1) == c1)
            {
                *(p + r - 1) = c2;
            }
            r++;
        }
    }

    printf("%s\n", p);

    free(p);
    p = NULL;

    return 0;
}

编辑于 2024-04-04 23:11:23 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main() {
    int n = 0, m = 0, l = 0, r = 0;
    cin >> n >> m;
    char* s = (char*)malloc(n * sizeof(char));
    char c1, c2;
    cin>>s;
    for (int i = 0; i < m; i++) {
        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;
}

编辑于 2024-03-20 22:00:26 回复(0)
#include <stdio.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    char arr[n+1];
    for(int i=1; i<=n; i++){
        scanf(" %c", &arr[i]);
    }
    for(int i=0; i<m; i++){
        int p, q;
        char a, b;
        scanf("%d %d %c %c", &p, &q, &a, &b);
        for(int j=p; j<=q; j++){
            if(arr[j] == a){
                arr[j] = b;
            }
        }
    }
    for(int i=1; i<=n; i++){
        printf("%c", arr[i]);
    }
    return 0;
}

编辑于 2024-02-13 18:30:22 回复(0)
列表,逐行比对并替换
m,n=map(int,input().split())
s=list(input())

for i in range(n):
    a = list(input().split())
    for j in range(int(a[0])-1,int(a[1])):
        if s[j] == a[2]:
            s[j] = a[3]

print("".join(x for x in s))


编辑于 2024-02-12 14:36:08 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;//字符串的长度
	int m = 0;//进行m 次 操作
	scanf("%d %d", &n, &m);

	getchar();//吸收换行符
	char s[101] = { 0 };
	//向数组中输入字符串
	for (int i = 1; i <= n; i++)
	{
		scanf("%c", &s[i]);
	}


	for (int i = 1; i <= m; i++)
	{
		int l = 0;
		int r = 0;//左右范围
		char c1 = 0;
		char c2 = 0;//将 c1 字符 改为 c2 字符
		
		scanf("%d %d\n%c\n%c", &l, &r, &c1, &c2);//注意吸收换行符

		//遍历 左右 区间内的 字符 并进行更改
		for (int j = l; j <= r; j++)
		{
			if (s[j] == c1)
			{
				s[j] = c2;
			}
		}
		
	}
	//输出
	for (int i = 1; i <= n; i++)
	{
		printf("%c", s[i]);
	}
	return 0;
}

发表于 2024-01-09 14:16:43 回复(0)
#include <stdio.h>

int main() 
{
    //n决定字符串长度,m决定替换次数
    int n, m;
    //字符串
    char s[100];
    //判断范围
    int l,r;
    //当l到r的范围内有满足c1的则替换成c2
    char c1, c2;
    //输入字符串长度,替换次数
    scanf("%d %d",&n,&m);
    getchar();
    //获取字符串内容
    for(int i = 0;i<n;i++)
    {
        scanf("%c",&s[i]);
    }
    //替换次数
    for(int j=0;j<m;j++)
    {
        //获取范围
        scanf("%d %d",&l,&r);
        //获取c1
        getchar();
        scanf("%c",&c1);
        //获取c2
        getchar();
        scanf("%c",&c2);
        getchar();
        //对l到r范围内等于c1的替换成c2
        for(int i = l-1;i<r;i++)
        {
            if(s[i]==c1)
            {
                s[i]=c2;
            }
        }
    }
    //打印
    for(int i=0;i<n;i++)
    {
        printf("%c",s[i]);
    }
    return 0;
}

编辑于 2024-01-02 23:52:49 回复(0)
package main

import (
    "fmt"
)

func main() {
    var n,m int
    fmt.Scan(&n,&m)
    bytes := make([]byte, n)
    for i:=0;i<n;i++{
        fmt.Scanf("%c", &bytes[i])
    }
    // 读掉字符串的 \n
    fmt.Scanf("\n")
    for i:=0;i<m;i++{
        var l,r int
        var c1,c2 byte
        fmt.Scanf("%d %d %c %c\n",&l,&r,&c1,&c2)
        for i:=l-1;i<=r-1;i++{
            if bytes[i] == c1 {
                bytes[i] = c2
            }
        }
    }
    for i:=0;i<n;i++{
        fmt.Printf("%c", bytes[i])
    }
}
发表于 2023-12-22 15:55:14 回复(0)
#include <stdio.h>
int main() {
    int m,n;
    char arr[200]={0};
    scanf("%d %d",&n,&m);
    scanf("%s",arr);
    for(int j=0;j<m;j++)
    {
        int l,r; char c1,c2;
        scanf("%d %d %c %c",&l,&r,&c1,&c2);
        for(int i=l-1;i<r;i++)
        {
           if(arr[i]==c1)
           {
            arr[i]=c2;
           }
        }
    }
    printf("%s",arr);
    return 0;
}

编辑于 2023-12-13 10:55:38 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    int i = 0;
    char arr[100] = { 0 };
    int arr1[100] = { 0 };
    int arr3[100] = { 0 };
    char arr2[100] = { 0 };
    char arr4[100] = { 0 };
    scanf("%d%d", &n, &m);
    for (int i = 0; i <= n; i++)
    {
        scanf("%c", &arr[i]);
    }
    for (int i = 1; i <= m; i++)
    {
        getchar();
        scanf("%d%d %c %c", &arr1[i],&arr3[i], &arr2[i], &arr4[i]);
    }
    for ( int a = 0; a < m; a++)
    {
        for (int i = arr1[a + 1]; i <= arr3[a + 1]; i++)
        {
            if (arr[i] == arr2[a + 1])
            {
                arr[i] = arr4[a + 1];
            }
        }
    }
        for (int i = 1; i <= n; i++)
        {
            printf("%c", arr[i]);
        }
    return 0;
}
发表于 2023-11-23 18:36:42 回复(0)