| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1750 人关注过本帖
标题:我是个新手 想向大神们请教一个问题:设计一个函数,将一个字符串插入到另一 ...
只看楼主 加入收藏
only159
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
我是个新手 想向大神们请教一个问题:设计一个函数,将一个字符串插入到另一个字符串的指定位置,要求用指针实现,以下是我的设计,部分正确,看了很久不知道哪里有错
#include<stdio.h>
#include<string.h>
#define N 200
 void insert(char *p,int n,char *q)
{
int i;
int len=strlen(q);
for(i=0;i<len;i++)
{
*(p+n+len+i) = *(p+n+i);
}
for(int j=0;j<len;j++)
{
*(p+n+j) = *(q+j);
}
}
int main()
{
char a[N],b[N];
 int n;
gets(a);
while(scanf("%d",&n),n>strlen(a)||n<0);
getchar();
gets(b);
insert(a,n,b);
puts(a);
 return 0;
}

搜索更多相关主题的帖子: 设计 int 指针 char 字符串 
2020-12-28 16:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:7 
第一个循环就有问题吧,你有没有考虑过字符串重叠的情况?
2020-12-28 17:05
only159
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-28
收藏
得分:0 
回复 2楼 rjsp
第一个循环我是想给要插入的字符串空出位置来
2020-12-28 17:11
only159
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-28
收藏
得分:0 
回复 2楼 rjsp
可是运行没有出现字符串重叠的现象啊
2020-12-28 17:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 3楼 only159
所以呢?
因为“你是想给要插入的字符串空出位置来”,所以就不会出现“字符串重叠”的情况?逻辑不通呀!
建议你将第一个循环,由 从头至尾拷贝 改为 从尾至头拷贝。
2020-12-28 17:14
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:7 
回复 楼主 only159
你首先得将插入点之后的字符整体向后移 b 数组长度个单元(即 len 个单元),而不是你的程序那样一个一个移,这样移很可能会覆盖 a 数组尾部的数据。比较有效的且对初学者来说最简单的一个笨办法就是:先将移动点之后的数据,先全部移到 b 数组的末尾,然后,再将 b 数组的全部数据(包括从 a 数组移过来的数据)移到 a 数组的插入点之后,这样便完成了整体插入一段字符的任务
2020-12-28 17:29
sd273723269
Rank: 2
等 级:论坛游民
威 望:1
帖 子:4
专家分:12
注 册:2020-12-28
收藏
得分:7 
#include <stdio.h>
#include <string.h>
char* mycpy(char* a, char* b, int* p);
int main(int argc, char const* argv[])
{
    char a[20] = "helloworld\0";
    char b[5] = "bbc\0";
    int i;
    int* p = &i;
    printf("输入要插入的下标:\n", i);
    scanf("%d", &i);
    while (i < 0 || i >= sizeof(a) / sizeof(a[0])) {
        printf("输入错误,重新输入:\n", i);
        scanf("%d", &i);
    }
    printf("%s\n", mycpy(a, b, p));
    return 0;
}

char *mycpy(char* a, char* b, int *p)
{
    int i;
    char *x = (char*)malloc(20 * sizeof(char));
    for (i = 0; i < *p; i++) {
        x[i] = a[i];
    }
    x[i] = '\0';
    strcat(x, b);
    for (i = (strlen(x)); i < (strlen(a) + strlen(b)); i++) {
        x[i] = a[i - strlen(b)];
    }
    x[strlen(a)+strlen(b)] = '\0';
    return x;
    free(x);
}
2020-12-28 20:45
sd273723269
Rank: 2
等 级:论坛游民
威 望:1
帖 子:4
专家分:12
注 册:2020-12-28
收藏
得分:0 
我也是新人,刚学1个月,见笑了
2020-12-28 20:48
only159
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2020-12-28
收藏
得分:0 
回复 7楼 sd273723269
不好意思,我没太看懂char*x后面的
2020-12-28 21:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

void insert( char* p, size_t n, const char* q )
{
    const size_t plen = strlen(p);
    const size_t qlen = strlen(q);
    if( n > plen )
        n = plen;
    
    for( size_t i=plen+1; i!=n; --i )
        p[i-1+qlen] = p[i-1];
    for( size_t i=0; i!=qlen; ++i )
        p[n+i] = q[i];
}

int main( void )
{
    char s[200] = "abcdefgh";
    insert( s, 3, "12" );
    puts( s );
}
2020-12-28 21:23
快速回复:我是个新手 想向大神们请教一个问题:设计一个函数,将一个字符串插入到 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017382 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved