注册 登录
编程论坛 C语言论坛

c语言:字符串替换

妖妖零 发布于 2022-11-11 22:16, 732 次点击
Description
ACM队吉祥物cjc学长因为一次做了太猥琐的事,被学嫂罚去写检讨书300字,于是他开挂去网上找样本,但是样本中的名字不一样会有破绽,现在需要你来帮忙替换样本中的名字name为学嫂的名字doctorZ。
Input
先输入一个T,代表有T组数据。
每组测试数据有一个数据name(0 < name < 20),表示样本中的名字。
接下来一行输入检讨书内容(name < s < 1000)。
Output
修改后的内容。
Samples
input
1
mwy
Dear mwy, do not be angry, I love you! I should not be so wretched, I was wrong, please forgive me. In the future, I will absolutely obey the leadership of you!
output
Dear doctorZ, do not be angry, I love you! I should not be so wretched, I was wrong, please forgive me. In the future, I will absolutely obey the leadership of you!
Hint
 在单词中出现name也需要替换!

1 回复
#2
rjsp2022-11-12 11:17
在单词中出现name也需要替换!
要求很奇怪

每组测试数据有一个数据name(0 < name < 20),表示样本中的名字。
如果输入了“  abc  def  ”,那算它的名字是"abc",还是"abc def",还是"  abc  def  "?
这一点不交代清楚的话,代码没法写

程序代码:
#include <stdio.h>
#include <string.h>

int main( void )
{
    unsigned T;
    scanf( "%u ", &T );
    while( T-- )
    {
        char name[20+1]; // fgets会保留'\n'
        char s[1000+1]; // fgets会保留'\n'
        fgets( name, 21, stdin );
        fgets( s, 1001, stdin );
        size_t len_name = strlen(name) - 1;
        name[len_name] = '\0';

        for( const char* p=s; ; )
        {
            const char* q = strstr( p, name );
            if( q )
            {
                fwrite( p, 1, (size_t)(q-p), stdout );
                fputs( "doctorZ", stdout );
                p = q + len_name;
            }
            else
            {
                fputs( p, stdout );
                break;
            }
        }
    }
}

1