首页 > 解决方案 > 在C中替换字符串的元素

问题描述

Spinx 兄弟在东京都警察总部安放了一枚炸弹。很方便,他们留下了一个字符串 S(当然是加密的)作为拆除炸弹的钥匙,但还有更多。警方从他们之前与斯芬克斯兄弟的遭遇中推断出可能的解密。字符串中的一些字母需要根据解密模式替换为其他一些字母。解密后的字母有可能再次被解密/替换。您需要替换字符串中的每个字母,直到它无法进一步替换,以获得密钥。他们要求你尽快做到这一点,因为总部的炸弹随时都会爆炸。

输入

第一行的字符串 S (1 ≤ |S| ≤ 105) 仅由小写字母组成。下一行有一个整数 M (1 ≤ M ≤ 325),表示替换的次数。接下来的 M 行有两个间隔字符,ci 和 di,其中 di 是 ci 的替换。

输出

在所有字符替换后打印最终字符串。

笔记

保证没有循环替换。

输入

nineandeleven

5

n l

l u

u w

e a

a y

输出

wiwyywdywyvyw

我就是这样编码的。我不能接受超过 3 行的输入

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
    char str[100000];
    scanf("%s",str);
    int M;
    char x,y;
    scanf("%d",&M);


    for(int i=0;i<M;i++){
        scanf("%c %c",&x,&y);
        for(int j=0;j<strlen(str);j++){
            if(str[j] == x) { str[j]=y;}
        }
    }

    printf("%s",str);
    return 0;
}

标签: cstring

解决方案


scanf("%c %c",&x,&y); 

改成

scanf(" %c %c",&x,&y);

多一个空间

因为当你输入“输入”

会将换行符(windows.linux 可能有点不同,就像\t\n \n你想知道谷歌一样)到你的缓冲区

当你使用%c最后阅读时,你推动而不是跳跃空间'\n',,'\t'

当您在前面添加空间时%c

scanf将在读取缓冲区之前跳转空间,'\n'然后'\t'将通过键盘正确输入


推荐阅读