C语言字符串替换

Python05

C语言字符串替换,第1张

效果图:

代码:

#include<stdio.h>

int getLen(char a[]) {

int len = 0

while (a[len] != '\0')len++

return len

}

int find(char a[], char b[], int idx) {

int la = getLen(a), lb = getLen(b), t = la - lb, i, f

for ( idx <= t idx++) {

f = 0

for (i = 0 i < lb i++) {

if (a[idx + i] != b[i]) { f = 1 break }

}

if (f == 0)return idx

}

return -1

}

int main() {

char a[1024], b[1024], cmp[1025]

int i = 0, j , la, lc

scanf("%s", a)

scanf("%s", cmp)

scanf("%s", b)

la = getLen(a)

lc = getLen(cmp)

j = 0 - lc

while (1) {

j = find(a, cmp, j + lc)

if (j == -1) {

while (i < la) {

printf("%c", a[i++])

}

break

}

for ( i < j i++)printf("%c", a[i])

i += lc

printf("%s", b)

}

printf("\n")

}

答题不易,如无疑问,觉得可以的话,采纳一下

#include<stdio.h>

#include <malloc.h>

#include <memory.h>

#include <string.h>

char *replace(char *str, const char *before, const char* after)

{

if (strcmp(before, after) == 0)

return str

char *ps = str

char* tmps

int fl

while (ps = strstr(ps, before))

{

tmps = (char*)malloc(ps - str + strlen(after) + 1)

memcpy(tmps, str, ps - str)

*(tmps + (ps - str)) = 0

strcat(tmps, after)

ps += strlen(before)

tmps=(char*)realloc(tmps, strlen(tmps) + strlen(ps) + 1)

fl = strlen(tmps)

strcat(tmps, ps)

strcpy(str, tmps)

ps = str + fl

free(tmps)

}

return str

}

int main()

{

char str[200] = "1223344222333444"

printf("%s\n", replace(str, "22", "ABC"))

return 0

}

哦,不能用strstr和memcpy啊,改了下:

#include<stdio.h>

#include <malloc.h>

#include <string.h>

char* fstr(char* str, const char* subs)

{

char* t = (char*)malloc(strlen(subs) + 1)

char* ps = str

int i

int slen = strlen(subs)

*(t + slen) = 0

while (strlen(ps) >= slen)

{

for (i = 0 i < slen ++i)

{

*(t + i) = *(ps + i)

}

if (strcmp(t, subs) == 0)

{

free(t)

return ps

}

++ps

}

free(t)

return NULL

}

char *replace(char *str, const char *before, const char* after)

{

if (strcmp(before, after) == 0)

return str

char *ps = str

char* tmps

int fl,i

while (ps = fstr(ps, before))

{

tmps = (char*)malloc(ps - str + strlen(after) + 1)

for (i = 0 i < ps - str ++i)

*(tmps + i) = *(str + i)

*(tmps + (ps - str)) = 0

strcat(tmps, after)

ps += strlen(before)

tmps = (char*)realloc(tmps, strlen(tmps) + strlen(ps) + 1)

fl = strlen(tmps)

strcat(tmps, ps)

strcpy(str, tmps)

ps = str + fl

free(tmps)

}

return str

}

int main()

{

char str[200] = "1223344222333444"

printf("%s\n", replace(str, "22", "ABC"))

return 0

}