lsdsg 发表于 2021-11-12 14:39:07

编程题4

【问题描述】

将字符串str中的子字符串s1替换成新的子字符串s2(字符串长度<100),如果字符串str中有多个s1,则应全部替换,最后输出被替换后的str字符串。



【输入形式】

输入3行,第一行是:字符串,第二行是:被替换子串,第三行是:替换子串



【输出形式】

替换后的字符串


【样例输入1】

hello word!

word

Cprogram



【样例输出1】

hello C program!



【样例输入2】

hello word!

o

w



【样例输出2】

hellw wwrd!

jhq999 发表于 2021-11-12 16:06:58

本帖最后由 jhq999 于 2021-11-12 16:09 编辑

int Changestr(char* inch,char* srcch,char* drcch)
{
        int i=0,j=0,k=0,len;
        while(inch);
        len=i;
        char *tmp=new char;
        i=0;
        while(inch)
        {
                j=0;
                if(inch==srcch)
                {
                       
                        while((inch==srcch)&&inch)j++;
                        if(!srcch)
                        {
                                for (k = i+j; inch; k++)
                                {
                                        tmp=inch;
                                }
                                tmp=inch;
                               
                                for (j=i; drcch; i++)
                                {
                                        inch=drcch;
                                }
                               
                                for (j = 0;tmp; j++)
                                {
                                        inch=tmp;
                                }
                                inch=tmp;
                        }

                }
                i++;
        }
        delete[] tmp;
        return 0;
}
int main ()
{
        //CallID(5);
        char ch={0},oldch={0},newch={0};
        scanf("%[^\n]",ch);
        getchar();
        scanf("%[^\n]",oldch);
        getchar();
        scanf("%[^\n]",newch);
        getchar();
        Changestr(ch,oldch,newch);
        printf("%s",ch);
        return 0;
}

jackz007 发表于 2021-11-12 17:27:41

本帖最后由 jackz007 于 2021-11-13 23:50 编辑

#include <stdio.h>

char * replace(char s[] , char s1[] , char s2[])
{
      int i , j , k , m , n , p                                                                           ;
      for(m = 0 ; s; m ++)                                                                           ;
      for(n = 0 ; s1 ; n ++)                                                                           ;
      for(p = 0 ; s2 ; p ++)                                                                           ;
      for(i = 0 ; i < m - n + 1 ; i ++) {
                for(j = 0 ; j < n ; j ++) if(s != s1) break                                       ;
                if(j == n && j > 0) {
                        if(p > n) for(k = 0 ; k < m - (i + n) + 1 ; k ++) s = s         ;
                        else if(p < n) for(k = 0 ; k < m - (i + n) + 1 ; k ++) s = s    ;
                        for(k = 0 ; k < p ; k ++) s = s2                                          ;
                        m += p - n                                                                            ;
                        i += p - 1                                                                            ;
                }
      }
      return s                                                                                              ;
}

int main(void)
{
      char s , s1 , s2                                                                     ;
      gets(s)                                                                                             ;
      gets(s1)                                                                                              ;
      gets(s2)                                                                                              ;
      printf("%s\n" , replace(s , s1 , s2))                                                               ;
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
hello word!
word
Cprogram
hello Cprogram!

D:\0002.Exercise\C>x
hello word!
o
w
hellw wwrd!

D:\0002.Exercise\C>

lsdsg 发表于 2021-11-13 23:38:52

jackz007 发表于 2021-11-12 17:27
编译、运行实况:

带哥它要求如果字符串str中有多个s1,则应全部替换能再改进下吗{:10_254:}{:10_254:}

jackz007 发表于 2021-11-13 23:49:19

lsdsg 发表于 2021-11-13 23:38
带哥它要求如果字符串str中有多个s1,则应全部替换能再改进下吗

      就是全替换啊,你试过吗,难道不行?

傻眼貓咪 发表于 2021-11-14 10:31:48

lsdsg 发表于 2021-11-13 23:38
带哥它要求如果字符串str中有多个s1,则应全部替换能再改进下吗

字符串 s1 中的多个子字符串 s2 全部替换成 s3:#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* replace(const char* str, const char* old, const char* new)
{
        char* result;
        int i, count = 0;
        int n = strlen(new);
        int m = strlen(old);
        for (i = 0; str != '\0'; i++) {
                if (strstr(&str, old) == &str) {
                        count++;
                        i += m - 1;
                }
        }
        result = (char*)malloc(i + count * (n - m) + 1);
        i = 0;
        while (*str) {
                if (strstr(str, old) == str) {
                        strcpy(&result, new);
                        i += n;
                        str += m;
                }
                else result = *str++;
        }
        result = '\0';
        return result;
}

int main()
{
        char str, old, new;
        scanf("%[^\n]", str);
        getchar();
        scanf("%[^\n]", old);
        getchar();
        scanf("%[^\n]", new);
        getchar();
        char* result = NULL;
        result = replace(str, old, new);
        printf("%s", result);
        free(result);
        return 0;
}
页: [1]
查看完整版本: 编程题4