【问题标题】:String concatenation specifics [duplicate]字符串连接细节[重复]
【发布时间】:2015-01-20 16:52:30
【问题描述】:
有没有什么函数/常用方法可以连接两个字符串,而string2出现在string1的指定位置?
如果问题不够清楚,看看这个例子:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[100] = "I love Gyros";
concatenate(&str[2], "dont ");
printf(str);
return 0;
}
输出:
I dont love Gyros
【问题讨论】:
标签:
c
string
concatenation
stdout
【解决方案1】:
有没有什么函数/常用方法可以连接两个字符串,而string2出现在string1的指定位置?
不,没有。
您可以使用多种方法来完成您正在尝试的事情。一种方法是使用sprintf。
char str[100];
sprintf(str,"I %s love Gyros", "don't");
另一种方法是将str 的内容向右移动所需的量,然后设置中间元素的值。
#include <stdio.h>
#include <string.h>
void insertInString(char* str1, size_t pos, char const* str2)
{
size_t len1 = strlen(str1);
size_t len2 = strlen(str2);
size_t i = 0;
// Shift the contents of str1
for ( i = len1; i >= pos; --i )
{
str1[i+len2] = str1[i];
}
// Now place the contents of str2 starting from pos
for ( i = 0; i < len2; ++i )
{
str1[i+pos] = str2[i];
}
}
int main()
{
char str[100] = "I love Gyros";
insertInString(str, 2, "don't ");
printf("%s\n", str);
return 0;
}
【解决方案2】:
没有功能可以做你想做的事。
与其让函数连接起来,让它正常工作并不是微不足道的,不如让函数 insert_phrase 和原型......
char *insert_phrase(char *string,char *phrase,size_t after_word);
您的示例现在将显示为...
Insert_phrase(str,"不要",1);
要真正使用你的连接函数,在将 don't 插入 str 之前,需要对两个参数进行词法分析。