题目:编写一个函数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"); }
经过调试了的,但想寻求更简单的方法。