编程题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: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-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> jackz007 发表于 2021-11-12 17:27
编译、运行实况:
带哥它要求如果字符串str中有多个s1,则应全部替换能再改进下吗{:10_254:}{:10_254:} lsdsg 发表于 2021-11-13 23:38
带哥它要求如果字符串str中有多个s1,则应全部替换能再改进下吗
就是全替换啊,你试过吗,难道不行? 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]