指针函数

题目:编写一个函数fun ,其功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。并在主函数中设计s、t1、t2所指字符串输入并输出w所指的数组。将程序保存在TEST2.C文件中。(30分)

例如,当s所指字符串中的内容为:"abcdabfabc",t1所指子串中的内容为:

"ab",t2所指子串中的内容为:"99"时, 结果,在w所指的数组中的内容应为:

"abcdabf99c"。

代码:

#include <stdio.h>  

#include <string.h>  

#include <stdlib.h>  

#define N 30    //s所指字符串的最大长度  

#define T 2     //t1和t2所指字符串的长度  

   

/***********************************************  

*函数名称: fun  

*创建时间: 2010.12.5  

*作    者: huangliangming  

*描    述: 将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串  

*参    数: char * s,char * t1, char * t2,int *m  

*返 回 值: w(数组w[]的首元素地址)  

*局部变量: char w[N];  

*           char temp[T];  

*           char t1temp[T];  

*           int i,j,k,l;  

************************************************/ 

char * fun(char * s,char * t1, char * t2,int *m)    //m的作用和第一题一样,没m最后两个字符会乱码(想寻求其他方法)         

{  

    char w[N];              //用来存放处理后的字符串  

    char temp[T];       //用来存放从s所指字符串中截取的子串  

    char t1temp[T];     //用来存放t1所指字符串  

    int i,j,k,l;  

    //向t1temp中存入t1所指字符串  

    for (i=0; i<T;i++)  

    {  

        t1temp[i]=t1[i];  

    }  

    t1temp[T]='\0';  

       

    //求m所指的值  

    for (i=0;i<N;i++)  

    {  

        if (s[i]=='\0')  

        {  

            *m=i;  

        }  

    }  

   

    //寻找相同时的最后一个字符的下标  

    for (i=0; i<N; i++)  

    {  

        l=0;  

        for (j=i; j<(i+T); j++,l++)  //截取长度为T的子串存到temp[]中  

        {  

            temp[l]=s[j];  

        }  

        temp[T]='\0';  

   

        if (strcmp(t1temp,temp) == 0)  

        {  

            k=i;        //k记录相同时的最后一个字符的下标  

        }  

    }  

   

    for (i=0; i<N; i++)  //赋值给w[]  

    {  

        j=0;  

        if (i>=k && i<(k+T))      //在找到的k点处开始换值  

        {  

            w[i]=t2[j];             //换值  

            j++;  

        }  

        else 

        {  

            w[i]=s[i];  

        }  

    }  

       

    return w;  

}  

   

//主函数  

void main()  

{  

    char s[N];  

    char t1[T];  

    char t2[T];  

    int i;  

    int m;  

    char *p;  

   

    p=NULL;  

    printf("请输入字符串(20字符以内):");  

    scanf("%s",s);  

    printf("请输入将要被替换的子字符串(仅限两个字符):");  

    scanf("%s",t1);  

    printf("请输入将要用来替换的字字符串(仅限两个字符):");  

    scanf("%s",t2);  

    p=fun(s,t1,t2,&m);                    

    for (i=0; i<m; i++)              //将返回的值复制给数组以待输出  

    {  

        s[i]=p[i];  

    }  

       

    printf("结果为:");  

    for (i=0; i<m; i++)              //输出结果  

    {  

        printf("%c",s[i]);  

    }  

    printf("\n");  

} 

经过调试了的,但想寻求更简单的方法。

posted @ 2010-12-08 22:50  涵曦  阅读(2115)  评论(4编辑  收藏  举报