这是学习字符串的时候做过的一个习题,可能有BUG,作为一个练习,仅供楼主参考。
程序代码:
#include <stdio.h>
int main (void) {
char string[81],s1[10],s2[10]; //string为主串,s1为源字符串,s2为要替换的字符串
int pos; //要删除/插入的位置
void readLine (char str[]); //读取输入
int strLen (char str[]); //获取字符串长度
int findStr (char str[],char s1[]); //查找字符串,返回字符串所在起始位置
void replaceStr (char str[],char s1[],char s2[],int pos); //字串替换
//输入原文
printf ("Type in text in string:\n");
readLine(string);
//输入要被替换的字符串
printf ("Type will be replaced string:\n");
readLine(s1);
//输入即将替代的字符串
printf ("Type new string:\n");
readLine(s2);
//查找字符串所在位置
pos=findStr(string,s1);
//如果没有找到则退出程序
if(pos==-1) {
printf ("No Found!\n");
return 1;
}
//否则,进行替换操作
replaceStr(string,s1,s2,pos);
//打印结果
printf ("\nAfter replaced is : %s\n",string);
return 0;
}
//read line in string
void readLine (char str[]) {
char ch;
int i=0;
do {
ch=getchar();
str[i]=ch;
i++;
}while(ch!='\n');
str[i-1]='\0';
}
//get length of string
int strLen (char str[]) {
int len=0;
while(str[len]!='\0'){
len++;
}
return len;
}
//
int findStr (char str[],char s1[]) {
int i,j,k,c,len;
for(i=0;str[i+strLen(s1)-1]!='\0';i++) {
for(j=i,k=0,c=0;j<(strLen(s1)+i);k++,j++) {
if(str[j]==s1[k]) {
c++;
}
}
if(c==strLen(s1)) {
return i;
}
}
return -1;
}
//replace character string
void replaceStr (char str[],char s1[],char s2[],int pos) {
void moveStr (char str[],int n,int m);
void insertStr (char str[],char s2[],int n);
moveStr(str,pos,strLen(s1));
insertStr(str,s2,pos);
}
//move sub-string in main string
void moveStr (char str[],int n,int m) {
int i,j;
for(i=n,j=(m+n);str[j]!='\0';i++,j++) {
str[i]=str[j];
}
str[i]='\0';
}
//insert sub-string in main string
void insertStr (char str[],char s2[],int n) {
int i,j,k,l1,l2;
l1=strLen(s2);
l2=strLen(str);
for(i=l2-1;i>=n;i--) {
str[i+l1]=str[i];
}
str[l1+l2]='\0';
for(i=n,k=0;i<n+l1;i++,k++) {
str[i]=s2[k];
}
}