使用另一个字符串替换字符串中的字符而不使用内置函数

时间:2014-03-20 07:24:35

标签: c string

我有两个字符串。 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];。我需要写什么代替这个。请帮我。我需要在不使用内置函数的情况下编写它。

先谢谢..

3 个答案:

答案 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
}