技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 程序开发 > c/c++ > 正文

怎么把一段字符串插入到另一段字符串

来源: 技术CTO 阅读:

    char ch1[30],ch2[30],ch3[100];
    int m,i,j;
   
printf("please input ch1:\n");
    scanf("%s",ch1);
    printf("please input ch2:\n");
scanf("%s",ch2);
    printf("please input m:\n");
    scanf("%d",&m);
    
for(i=0;i<m;i++)
       ch3[i]=ch1[i];
printf("%s\n",ch3);
for(i=m;i<(strlen(ch2)+m);i++)
   ch3[i]=ch2[i];
printf("%s\n",ch3);
for(i=m+strlen(ch2),j=m;ch1[j]!='\0';i++,j++)
   ch3[i]=ch1[j];
ch3[strlen(ch1)+strlen(ch2)]='\0';

printf("%s",ch3);

为什么我这样写不行,把ch2插入到ch1里面,我的想法是把他们分段存储到ch3里面
strcat函数,连接两个字符串
什么把ch2插入到ch1,又分段存储到ch3中?不明白你的意思了……你那个m怎么理解?如果我输入101?怎么办?还有记住数组的初始化、sizeof和strlen的区别……
其实LZ是想把ch1和ch2组合成一个新的字符数组,但是不是strcat那样直接把ch2添加到ch1尾部,而是把ch2内容插到ch1第m个元素的后面。
代码很乱啊,第二个循环中ch2[i]就不对吧,这个i应该是从0开始吧(或者这里应该是一个从0开始的j)
以下代码的任务是将ch2插入到ch1的第m个字符之后,并将结果放在ch3中,这里需保证m不能大于ch1的总长度,否则ch2无法插入。仅供参考,大神勿喷
	char ch1[30] = {0};
char ch2[30] = {0};
char ch3[100] = {0};
int m; // 在ch1中第m个字符之后插入ch2,不应该大于ch1的总长度

printf("please input ch1:\n");
scanf("%s",ch1);
printf("please input ch2:\n");
scanf("%s",ch2);
printf("please input m:\n");
scanf("%d",&m);

char *p1 = ch1;
char *p2 = ch2;
char *p3 = ch3;
int nTemp = 0;
while (*p1 != '\0')
{
if (nTemp < m)
{
*p3++ = *p1++;
}
else
{
if (*p2 == '\0')
{
*p3++ = *p1++;
}
else
{
*p3++ = *p2++;
}
}
nTemp++;
}


printf("str1:%s\nstr2:%s\n%d\n" ,ch1,ch2,m);
printf("%s\n",ch3);
写成函数不好吗?

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


/** 
 * @brief insert s2 into s1 at position n
 * 
 * @param s1
 * @param s2
 * @param n 
 * 
 * @return s1
 */
char *strins(char *s1, const char *s2, size_t n)
{
    size_t n1, n2;

    n1 = strlen(s1);
    if (n > n1)
        n = n1;

    n2 = strlen(s2);
    memmove(s1 + n + n2, s1 + n, n1 - n + 1);
    memcpy(s1 + n, s2, n2);

    return s1;
}

int
main(int argc, char *argv[])
{
    char s1[1024];
    char s2[] = "abc";

    strcpy(s1, "0123456789");
    strins(s1, s2, 3);
    printf("%s\n", s1);

    strcpy(s1, "0123456789");
    strins(s1, s2, 0);
    printf("%s\n", s1);

    strcpy(s1, "0123456789");
    strins(s1, s2, 10);
    printf("%s\n", s1);

    strcpy(s1, "0123456789");
    strins(s1, s2, 15);
    printf("%s\n", s1);

    return 0;
}

/* output:
012abc3456789
abc0123456789
0123456789abc
0123456789abc
*/
仅供参考
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[256];
char *p;
int r,n,i;
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);
                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^