我在C中编程,我想编写一个函数,它接受两个字符串和一个特定的位置(开始和结束),并用第二个字符串替换第一个字符串中从开头到结尾的字符。因此,声明将是这样的:void replace(char str1[], char str2[], int from, int to);
。
它之所以有点问题,是因为有时你要插入的字符串比位置(从 - 到)大,有时候更小,所以它并不总是很合适。我考虑过if(strlen(str2) > to-from)
和else if(strlen(str2) < to-from)
这样的条件,或者是其他的正式循环(因为它是唯一剩下的选项......)。
你知道循环应包含什么吗?
编辑: 我有它,但有一件事是行不通的。如果我要插入第一个字符串的字符串小于from和to之间的字符串(意味着我需要删除所困扰的字符),那么它就无法工作了。 当我想要插入的字符串小于可能的空格时激活的语句是:
if(strlen(str2) < to-from+1)
{
location = from+strlen(str2)+1;
j = 0;
for (i = from ; i < to && j < strlen(str2) ; i++)
{
str1[i] = str2[j];
j++;
}
for(i = location ; i <= to ; i++)
{
for(j = i ; j <= strlen(str1) ; j++)
{
str1[j] = str1[j+1];
}
}
}
答案 0 :(得分:0)
正确识别后,str2
可能不适合分配给str1
的空间。
由于您提供的函数原型不会返回新字符串,或者允许重新分配输入缓冲区,因此我认为在任何情况下都不可能。
如果可以,我认为您应该将原型更改为:
char* replace(char* str1, char* str2, int from, int to);
通过更改返回值,您可以返回一个新的缓冲区,调用者必须释放该缓冲区,该缓冲区将具有生成的输出字符串。