我有两个字符串。 s={"Mangalore"}
和p={"Man"}
。我想用字符串'a'
替换"man"
的每一次出现。即
输入:芒格洛尔
输出:MManngManlore
我试过这个程序。但我一度陷入困境。这是我的功能:
string_replace(char *s,char *p)
{
char t[25];
int i,j,len1,len2;
len1=strlen(s);
len2=strlen(p);
for(i=0;i<len1;i++)
{
if(s[i]=='a')
{
for(j=0;j<len2;j++)
t[i+j]=p[j];
}
else
{
t[i]=s[i];
}
}
}
我怀疑是t[i]=s[i];
。我需要写什么代替这个。请帮我。我需要在不使用内置函数的情况下编写它。
先谢谢..
答案 0 :(得分:0)
结果t
的长度可能比输入的长度长,因此仅使用25的固定长度输出可能不是一个好主意。实际上,语句t[i]=s[i]
是有问题的,因为结果t
的索引最终需要更大。我建议使用一个额外的变量来跟踪要写入的t
的下一个位置。
答案 1 :(得分:0)
再使用一个变量k。最初是k = i;然后在for循环之后,
if(s[i]=='a')
{
for(j=0;j<len2;j++)
t[i+j]=p[j];
添加
k=k+j
并在外部for循环中用i递增k。 这是因为使t [i] = s [i]导致使t [] = s []所以不改变数组。所以把它改成
t[k]=s[i]
完整的代码可以像,
for(i=0,k=0;i<len1;i++,k++)
{
if(s[i]=='a')
{
for(j=0;j<len2;j++)
t[k+j]=p[j];
k=k+j;
}
else
{
t[k]=s[i];
}
}
}
答案 2 :(得分:0)
您需要跟踪s
指向的缓冲区中的字符。
#define MAX_LEN
string_replace(char *s, char *p) {
char t[MAX_LEN];
char ch = 'a'; // char to be replaced by string pointed to by p
while(*s) {
if(*s == ch) {
while(*p)
*t++ = *p++; // copy the string pointed to by p to t
}
else
*t++ = *s++; // copy the characters of s to t which are not ch
}
*t = '\0'; // append the null byte to t to make it a string
}