我正在尝试编写一个接受三个 c 样式字符串并返回一个 c 样式字符串的函数。此函数在 c 字符串中搜索所有出现的子字符串,并用不同的字符串替换它们。
这个程序有效,但看起来很不优雅。我情不自禁地感觉它本来可以用不那么笨重的方式完成。
char* replaceSubstring(char *original, char *from, char *to)
{
int origlen = strlen(original);
int i = 0;
int count = 0;
char *ptr;
//figure out how many times the sub-string occurs in a string.
//i couldn't figure out a way to avoid this loop
while (i<origlen)
{
ptr = strstr(original+i, from);
if (!ptr)
break;
else
{
i = ptr - original + 1;
count++;
}
}
//figure out what the size of the output string has to be
int newsize = origlen + (strlen(to) - strlen(from)) * count;
char *newstring = new char[newsize];
newstring[0] = '\0';
i = 0;
while (i < origlen)
{
ptr = strstr(original+i, from);
if (!ptr)
{
strcat(newstring,original+i);
break;
}
else
{
//this looks extremely ugly and bulky...
strncat(newstring, original+i, ptr-(original+i));
strcat(newstring, to);
i = i + ptr - (original + i) + strlen(from);
}
}
strcat(newstring,"\0");
return newstring;
}
有人对如何使这段代码更清晰和/或更高效有任何建议吗?欢迎任何意见。请不要建议改用类字符串。这不是一个选择。该函数必须与 c 字符串一起使用