我真的需要一些帮助来解决这个问题......
char *replace(char *s, char *pat, char *rep)
返回字符串 s 的副本,但带有
pat
的每个实例替换为rep
.注意len(pat)
可以小于、大于或等于len(rep)
.该函数为结果字符串分配内存,并由调用者释放它。例如,如果我们调用replace("Fiore X", "X", "sucks")
, 返回的是新字符串Fiore sucks
(但请记住,pat
可能比单个字符长,并且可能出现多次)。
我已经设法确定该模式是否出现在原始字符串中,但如果该模式出现不止一次,我就会遇到问题。我还没有涉及用替换文本创建新字符串的部分。我不允许使用 <string.h>
中的任何功能. (我对 C 还是很陌生)
char *replace(char *s, char *pat, char *rep){
char *a = malloc(300);
char *pa = s;
int patLen = 0;
int i;
for(i = 0; pat[i] != '\0'; i++)
{
patLen++;
}
int ogLen = patLen;
while(*s != '\0')
{
if(*s == *pat)
{
s++;
pat++;
patLen--;
while(*s == *pat)
{
s++;
pat++;
patLen--;
}
if(patLen == 0)
{
printf("This is a pattern");
patLen = ogLen;
}
}
s++;
}
return s;
}
最佳答案
由于您不能使用 string.h 函数,我将编写一些字符串实用函数来计算字符串长度、比较字符串和复制字符串。这将使您的代码更易于理解。我会通过 string s 进行 2 次传递:第一次会计算 pat 的出现次数。然后我可以计算新字符串的大小:length(s) + occurrences * (length(rep) - length(pat)。分配新字符串。现在再次通过 string s,复制到新字符串中,但每当出现 pat已找到,请改为复制 rep。希望这对您有所帮助。
关于c - 用新字符串替换字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623718/