将字符串(逐字符)插入较大的字符串
我试图通过用新字符串(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的尝试,但只是给错误/警告(是与指针,我不希望处理指针,因为我还没有了解它们。)
您的函数没有什么意义,因为它不会放大或缩小原始字符串,尽管它必须这样做。
而且它不确定的行为,由于这个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
这将如何使用我的例子? –
没关系我得到它的工作。再次感谢你。弗拉德这个作品,但希望它会在我的整个计划 –
您的先生是惊人的,它在我的程序中的作品谢谢 –
嗯,这是很难用字符串没有处理指针。 ;-) –
啊哈我明白,但有没有办法解决这个问题,没有他们? –
不,你已经在使用字符串了。但是,这并不重要。请解决您的问题,而不使用阵列数组。你不需要那个来描述你的问题。 http://*.com/help/mcve –