// 参数说明: // in, 源字符串 // out, 存放最后结果的字符串 // outlen,out最大的大小 // src,要替换的字符串 // dst,替换成什么字符串 char *strrpl(char *in, char *out, int outlen, const char *src, char *dst) { char *p = in; unsigned int len = outlen - 1;
// 这几段检查参数合法性 if((NULL == src) || (NULL == dst) || (NULL == in) || (NULL == out)) { return NULL; } if((strcmp(in, "") == 0) || (strcmp(src, "") == 0)) { return NULL; } if(outlen <= 0) { return NULL; }
while((*p != '\0') && (len > 0)) { if(strncmp(p, src, strlen(src)) != 0) { int n = strlen(out);
out[n] = *p; out[n + 1] = '\0';
p++; len--; } else { strcat_s(out, outlen, dst); p += strlen(src); len -= strlen(dst); } }
return out; }
标准C语言实现下列标准库函数,设计中不得使用其他库函数。 strstr库函数:
char *strstr(char *str1,char *str2); 在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。
#include <iostream>
char *strstr(const char *str1, const char *str2);
char *strstr(const char *str1, const char *str2) { char *s1, *s2; assert ((str1 != (char *)0) && (str2 != (char *)0)); /* 空字符串是任务字符串的子字符串 */ if ('\0' == *str2) { return ((char *)str1); } while (*str1) { s1 = (char *)str1; s2 = (char *)str2; while ((*s1 == *s2) && *s1 && *s2) { s1++; s2++; } if ('\0' == *s2) { return ((char *)str1); } str1++; } /* 查找不成功,返回NULL */ return ((char *)0); }
int main(int argc,char *argv[]) {
char a[20]="abcde"; char b[20]="bc"; printf("%s\n", strstr(a,b));
system ("pause"); return 0; }
strrpl库函数:
/* 把 s 中的字符串 s1 替换成 s2 */
char *strrpl(char *s, const char *s1, const char *s2)
{
char *ptr;
while (ptr = strstr(s, s1)) /* 如果在s中找到s1 */
{
memmove(ptr + strlen(s2) , ptr + strlen(s1), strlen(ptr) - strlen(s1) + 1);
memcpy(ptr, &s2[0], strlen(s2));
}
return s;
}
|