| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 703 人关注过本帖
标题:大家帮帮看一下这个串的函数怎么调
只看楼主 加入收藏
wangyinshiwo
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2007-11-9
收藏
 问题点数:0 回复次数:2 
大家帮帮看一下这个串的函数怎么调
/* Note:Your choice is C IDE */
#include "stdio.h"
#include<malloc.h>
#define MAX 256
#define LEN sizeof(char)*MAX
typedef struct
{
    char *ch;
    int len;
    int strsize;
}strings;
void initstring(strings *s)
{
    s->ch=(char *)malloc(LEN);
    s->len=0;
    s->strsize=MAX;
}
void in_string(strings *s)
{
    int i=0;
    char ch;
    while( (ch=getchar())!='\n'&&i<s->strsize )
    s->ch[i++]=ch;
    s->len=i;
}
strings *substr(strings *s,int i,int j,strings *t)
{   //在字符串s中,把从第i个字符开始的连续j个字符存入字符串t中
    int k;
    if(i<=0||i>=s->len||j<0||j>s->len-i+1)return 0;
    if(t->len<j)
    {
        t->ch=(char *)realloc(t->ch,j*sizeof(char));
        t->len=j;
    }
    for(k=0;k<j;k++)
    t->ch[k]=s->ch[i-1+k];
    t->len=j;
    return t;
}
strings *insert(strings *s,int i,strings *t)
{   //在字符串s的第i个字符之前插入字符串t
    int j;
    if(i<=0||i>s->len+1)return 0;
    if(s->strsize<s->len+t->len)
    {
        s->ch=(char *)realloc(s->ch,(s->len+t->len)*sizeof(char));
        s->len=s->len+t->len;
    }
    for(j=s->len-1;j>=i-1;j--)
    s->ch[j+t->len]=s->ch[j];
    for(j=0;j<t->len;j++)
    s->ch[i-1+j]=t->ch[j];
    s->len+=t->len;
    return s;
}
strings *del(strings *s,int i,int j)   
{   //在字符串中,删除从第i个字符开始的连续j个字符
    int k;
    if(i<=0||i>=s->len||j<0||j>s->len-i+1)return 0;
    for(k=i+j-1;k<s->len;k++)
    s->ch[k-j]=s->ch[k];
    s->len-=j;
    return s;
}
void list(strings *s)
{
    int i;
    for(i=0;i<s->len;i++)
    printf("%c",s->ch[i]);
    printf("\n");
}
void main()
{
    strings *s,*t,*r,a,b,c;
    int i,j;s=&a;t=&b;r=&c;
    initstring(s);initstring(t);
    printf("请输入第一个字符串:");in_string(s);
    printf("请输入要取出的字符串位置和个数:");
    scanf("%d%d",&i,&j);
    s=substr(s,i,j,t);
    printf("删除后的字符串为:");list(s);
    in_string(r);initstring(r);in_string(r);
    printf("请输入要插入的位置:");scanf("%d",&i);
    s=insert(s,i,r);list(s);
}
这个调用插入函数不知道怎样改才能重新传给它两个新的字符串,还有最后那个删除函数也不打懂调用。请大家帮帮写一下。
搜索更多相关主题的帖子: 函数 int strings MAX char 
2008-05-01 21:34
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
要将两个新的字符串输入到原串中,需要先建立两个strings的两个结构体变量,然后才能用insert函数分别进行插入操作.
本人觉得还应该建立一个新的insert_string函数来支持插入字符串而不是strings结构变量.

至于删除函数:
strings *del(strings *s,int i,int j)   
{   //在字符串中,删除从第i个字符开始的连续j个字符
    int k;
    /*我认为它还应该添加判断条件即i>=j(也应当退出)
    j>s->len-i+1相当于j+i>s->len+1.例如:
    j==0 i==1就可以满足条件.
    还是就是i<=0不知道为什么难道不可能删除下标为0的字符吗?*/

    if(i<=0||i>=s->len||j<0||j>s->len-i+1)return 0;
    for(k=i+j-1;k<s->len;k++)
    s->ch[k-j]=s->ch[k];
    s->len-=j;
    return s;
}

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2008-05-01 23:26
夜火
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2007-5-30
收藏
得分:0 
这种简单的字符串操作我觉得还是用指针处理的好

结构体最大的用处在与处理连续数据
没必要这样干用结构体 感觉你把简单的问题弄的很复杂
那么多的字符串处理函数不用 去自己一个个弄实在不是好办法吧

[[it] 本帖最后由 夜火 于 2008-5-2 00:15 编辑 [/it]]

2008-05-02 00:14
快速回复:大家帮帮看一下这个串的函数怎么调
数据加载中...
 
   



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

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