将字符串(逐字符)插入较大的字符串

问题描述:

我试图通过用新字符串(toInsert)替换(原始)字符串中的子字符串来插入字符串。 start参数是我想要替换的子串的起始位置。注意:这是一个更大的程序的一部分,但我只是想让这个功能起作用。将字符串(逐字符)插入较大的字符串

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define ROW 5 
#define COLUMN 81 

void insertString(char original[], int start, int length, char toInsert[]){ 

char buffer[COLUMN]; 
int i = 0; 

for (i=0; i<strlen(original); ++i){ 
    if (i>=start){ 
     buffer[i] = toInsert[i]; 
    } 
    else{ 
     buffer[i] = original[i]; 
    } 
} 

buffer[strlen(buffer)-1] = '\0'; 



printf("%s\n", buffer); 



return; 
} 

int main() 
{ 
char rep[COLUMN] = "very"; 
char sub[COLUMN] = "are"; 

char buf[ROW][COLUMN] = { 
    {"How are you doing"} 


}; 
int len = strlen(sub); 
int start = 4; 

insertString(buf[0], start, len, rep); 



return 0; 
} 

问题是它只打印“如何”。

我希望它打印出“你怎么做的非常”

而且,我一直在使用strcpy的尝试,但只是给错误/警告(是与指针,我不希望处理指针,因为我还没有了解它们。)

+0

嗯,这是很难用字符串没有处理指针。 ;-) –

+0

啊哈我明白,但有没有办法解决这个问题,没有他们? –

+0

不,你已经在使用字符串了。但是,这并不重要。请解决您的问题,而不使用阵列数组。你不需要那个来描述你的问题。 http://*.com/help/mcve –

您的函数没有什么意义,因为它不会放大或缩小原始字符串,尽管它必须这样做。

而且它不确定的行为,由于这个if语句,因为当i等于或大于start更大,你可以访问内存超出使用索引i字符串toInsert

if (i>=start){ 
    buffer[i] = toInsert[i]; 
} 

它是易于编写用标准C功能的功能。

给你

#include <stdio.h> 
#include <string.h> 

char * replaceString(char *s1, size_t pos, size_t n, const char *s2) 
{ 
    size_t n1 = strlen(s1); 

    if (pos < n1) 
    { 
     size_t n2 = strlen(s2); 

     if (n != n2) 
     { 

      memmove(s1 + pos + n2, s1 + pos + n, n1 - pos - n + 1); 
     } 

     memcpy(s1 + pos, s2, n2); 
    } 

    return s1; 
} 


int main(void) 
{ 
    { 
     char s1[100] = "ab1111cd"; 
     const char *s2 = "22"; 

     puts(replaceString(s1, 2, 4 , s2)); 
    } 

    { 
     char s1[100] = "ab11cd"; 
     const char *s2 = "2222"; 

     puts(replaceString(s1, 2, 2 , s2)); 
    } 

    { 
     char s1[100] = "ab11cd"; 
     const char *s2 = "22"; 

     puts(replaceString(s1, 2, 2 , s2)); 
    } 

    return 0; 
} 

程序输出是

ab22cd 
ab2222cd 
ab22cd 

如果在示范程序中插入的代码块

{ 
    char s1[100] = "How are you doing"; 
    const char *s2 = "very"; 

    puts(replaceString(s1, 4, 3 , s2)); 
} 

你会得到输出

How very you doing 
+0

这将如何使用我的例子? –

+0

没关系我得到它的工作。再次感谢你。弗拉德这个作品,但希望它会在我的整个计划 –

+0

您的先生是惊人的,它在我的程序中的作品谢谢 –