| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3839 人关注过本帖
标题:数据结构串的问题,在输入的指定位置前插入字符串
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:10 
数据结构串的问题,在输入的指定位置前插入字符串
#include<stdio.h>
#define max 8

typedef struct
{
    char ch[max];
    int last;
}string;

void InintString(string *s,int Max)
{
    for(int i=0;i<Max;i++)
        s->ch[i]='\0';
    s->last=0;
}

void CreateString(string *s,char a[],int n)
{
    int i=0;
    for(;i<n;i++)
    {
        s->ch[i]=a[i];
    }
    s->ch[i+1]='\0';
    s->last=n;
    printf("你输入的字符串为:\n");
    printf("%s",s->ch);
    printf("\n");
}

void StrInsert(string *s,char b[],int n,int pos)
{
    int i;
    if(pos<0||pos>s->last)
    {
        printf("输入的位置不合理!\n");
        return;
    }
    if(s->last+n-1<=max)
    {
        for(i=s->last+n-1;i>=n+pos-1;i--)       //这没看懂,,,
            s->ch[i]=s->ch[i-n];
        for(i=0;i<n;i++)
            s->ch[i+pos]=b[i];
        s->last+=n;
    }
    else if(pos+n<=max)
    {
        for(i=max-1;i>n+pos-1;i--)     //这没看懂,,
            s->ch[i]=s->ch[i-n];
        for(i=0;i<n;i++)
            s->ch[i+pos]=b[i];
        s->last=max;
    }
    else
    {
        for(i=0;i<max-pos;i++)     //这没看懂,,
            s->ch[i+pos]=b[i];
        s->last=max;
    }
}
int main()
{
    string s;
    int n=0,pos;
    char a[100],b[100];
    InintString(&s,max);
    printf("请输入字符串:\n");
        scanf("%s",a);
    for(int i=0;a[i]!='\0';i++)
    {
        n++;
    }
    CreateString(&s,a,n);
    printf("请输入你要插入的字符串:\n");
        scanf("%s",b);
    for(int i=0,n=0;b[i]!='\0';i++)
    {
        n++;
    }
    printf("请输入你要插入的位置:\n");
        scanf("%d",&pos);
    StrInsert(&s,b,n,pos);
    printf("新的字符串为:\n");
        printf("%s\n",s.ch);
    return 0;
}

做注释那几行没看懂
然后,形成的新的字符串总少一个元素
求解释。

[此贴子已经被作者于2017-10-17 21:50编辑过]

搜索更多相关主题的帖子: 字符串 max int for printf 
2017-10-17 21:16
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
直接用string赋值好象简单点

#include<stdio.h>
#define max 8

typedef struct
{
    char ch[max+1];
    int last;
} string;

void InintString(string *s,int Max)
{
    int i;
    for(i=0; i<Max; i++)
        s->ch[i]='\0';
    s->last=0;
}

string CreateString(char a[])
{
    string str;
    int i;
    for(i=0; a[i] && i<max; ++i)
        str.ch[i] = a[i];
    str.ch[i] = '\0';
    str.last = i;
    return str;
}

string StrInsert(string s, int pos, char b[])
{
    string str = s;
    int i,j,k;
    for (i=0; i<(pos-1) && s.ch[i]; ++i)
        str.ch[i] = s.ch[i];
    k = i;
    for (j=0; b[j] && i<max; ++i,++j)
        str.ch[i] = b[j];
    for (j=k; i<max && s.ch[j]; ++i,++j)
        str.ch[i]=s.ch[j];
    str.ch[i] = '\0';
    str.last = i;
    return str;
}

int main()
{
    int n=0,pos;
    char a[100],b[100];
    //InintString(&s,max);
    printf("请输入字符串:\n");
    scanf("%s",a);
    string s = CreateString(a);
    printf("你输入的字符串为:\n%s %d(byte)\n", s.ch,s.last);
    printf("请输入你要插入的d字符串:\n");
    scanf("%s",b);
    printf("请输入你要插入的位置:\n");
    scanf("%d",&pos);
    s = StrInsert(s,pos,b);
    printf("新的字符串为:\n%s %d(byte)\n", s.ch,s.last);
    return 0;
}
2017-10-18 11:59
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册

用我的代码插入一个字符有问题,插入一个字符串没问题。
这是怎么回事?
2017-10-18 12:25
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
插入一串字符没问题。一串就有错了、
2017-10-18 12:43
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
一楼代码“#define max 8”修改为“#define max 100”,应该正确率就高了(除非合并后的字串长度大于100)。
这个插入代码写的太啰嗦了,没必要看懂它。

能编个毛线衣吗?
2017-10-18 13:10
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 5楼 wmf2014
改成100也不对。。
老师让看的。。
2017-10-18 17:44
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
还请各位大佬帮忙看下,这段代码调好后要上交的。
插入的字符串长点没问题,短了就报错
2017-10-18 18:50
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 7楼 花脸
就一楼代码经反复测试,未发现问题。你能否提供错误样本?

能编个毛线衣吗?
2017-10-19 17:30
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 8楼 wmf2014
图片附件: 游客没有浏览图片的权限,请 登录注册

输入一串字符没问题,输入一个字符就错了,如上图。
2017-10-21 11:49
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
这个是你一楼原代码,运行结果正确。
由于我是用vc,不支持for内局部变量,所以在main函数里做了不影响功能的小修改及运行效果如下(如果你的编译器可通过编译,是不需要修改任何代码的):
……
    for(int i=0;a[i]!='\0';i++)
    {
        n++;
    }
    CreateString(&s,a,n);
    printf("请输入你要插入的字符串:\n");
        scanf("%s",b);
    for(i=0,n=0;b[i]!='\0';i++)  //这里去掉了int
……
图片附件: 游客没有浏览图片的权限,请 登录注册

能编个毛线衣吗?
2017-10-23 08:31
快速回复:数据结构串的问题,在输入的指定位置前插入字符串
数据加载中...
 
   



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

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