| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 618 人关注过本帖
标题:关于串替换,帮忙给个思路吧
只看楼主 加入收藏
刘林夕
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2011-10-14
结帖率:0
收藏
已结贴  问题点数:10 回复次数:3 
关于串替换,帮忙给个思路吧
将S串中的T替换为V,并输出替换后的串
      S=“ahebhechedhe”
      T= “he”
      V=“hello!”
#include"stdio.h"
#define MAXLEN 100
typedef struct
{
   char vec[MAXLEN];
   int len;
} Str;
高手们,能不能给个解题的思路,教教我这个菜鸟
搜索更多相关主题的帖子: include hello 
2011-11-11 14:03
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100

typedef struct
{
    char vec[MAXLEN];
    int len;
}Str;

void compre_string(char *ps, char *pt, Str &v);//比较字符串
void string_printf(char *p, char *q, Str &v);//输出字符串

int main(void)
{
    Str s, t, v;
    printf("请输入S字符串:");
    scanf("%s", s.vec);
    printf("请输入T字符串:");
    scanf("%s", t.vec);
    printf("请输入V字符串:");
    scanf("%s", v.vec);
    s.len = strlen( s.vec );
    t.len = strlen( t.vec );
    v.len = strlen( v.vec );
    printf("替换后字符串:");
    compre_string(s.vec , t.vec , v );
    printf("\n");
    return 0;
}

//找出ps字符串包含pt的起始地址和结束地址的后一个字符的地址
void compre_string(char *ps, char *pt ,Str &v)
{
    char *ptemp, *ptemp1, *ptemp2;
    ptemp = pt;//ptemp保存t字符串首地址
    ptemp1 = NULL;
    ptemp2 = ps;//ptemp2保存s字符串首地址
    while(1)
    {
        pt = ptemp;//每次循环使t字符串首地址赋给pt
        if(*ps == *pt)
        {
            ptemp1 = ps;//用ptemp1记录字符串s中每次与给定字符串t首字符相同的字符
            while(1)
            {   
                ps++;
                pt++;
                if((*ps != *pt) || (*ps == '\0'))//ps指向的字符与pt指向的字符不同或者到达s字符串尾部
                 {
                   
                     if(*pt == '\0')//如果pt指向的字符到达t字符串的尾部(说明t字符串在s字符串中存在)
                        {
                            string_printf(ptemp2, ptemp1, v);
                            ptemp2 = ps;
                        }
                     break;//否则,只要s字符串中连续的与t字符串连续的字符中有一个不同,就跳出进行下一次比较
                 }
            }       
        }
        else
        {
            ps++;
            if(*ps == '\0')//当到达s字符串尾部
            {
                printf("%s", ptemp2);//输出最后一部分字符
                break;//跳出循环
            }
        }
    }
}

//输出字符串中指定区间p和q之间的字符,并用字符串t.vec替换指定的字符串
void string_printf(char *p, char*q, Str &v)
{
    while(p != q)//当字符地址不同时
    {
        printf("%c",*p);
        p++;
    }
    printf("%s", t.vec);//用来替换的字符串
}


[ 本帖最后由 liao06550107 于 2011-11-11 18:49 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2011-11-11 18:46
huanega
Rank: 3Rank: 3
来 自:内蒙古
等 级:论坛游侠
帖 子:117
专家分:192
注 册:2011-11-4
收藏
得分:3 

兴趣是编程最好的老师
2011-11-11 18:55
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:3 
string.h
strstr();
strcpy();

能力 技巧
2011-11-11 21:51
快速回复:关于串替换,帮忙给个思路吧
数据加载中...
 
   



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

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