1、 掌握字符串的基本操作
2、 掌握字符串函数的基本使用方法
3、 熟悉串的模式匹配算法和一般的文字处理方法
1、串的模式匹配:设有一目标串s和一模式串s1,判断目标串s中是否包含模式串s1。
方法是:从目标串s中的第一个字符开始,按s1模式串的长度s1.len,与s1子串中的字符依次对应比较。若不匹配,则再从目标串s中的第二个字符开始,仍按s1模式串的长度s1.len,与s1子串中的字符依次对应比较。如此反复进行比较。直到匹配成功或者目标串s中剩余的字符少于s1的长度为止。若匹配成功,则返回s1在s中的位置。若匹配不成功,则返回函数值-1。
2、串连接:将两个字符串连接。其中一个串接在另一个串的末尾,生成一个新串。(注意:串的末尾有\0)若给出两个串s1和s2,把s2连接在s1之后,生成一个新串s。
3、两串相等判断:给定两个串s1和s2,当s1和s2相等时,返回函数值1,否则返回函数值0。
1、
#define MAXLEN 25
typedef struct
{char ch[MAXLEN];
int len;
}string;
int index(string s,string t,int pos){
int i,j;
i=pos;j=0;
while(i<s.len&&j<t.len){
if (s.ch[i]==t.ch[j]){++i;++j;}
else {i=i-j+1;j=0;}
}
if(j>t.len-1) return (i-t.len);
else return (-1);
}
main()
{string a={"Beijing Shanghai China",22},a1={"Shanghai",8};
int r;
r=index(a,a1,0);
printf("\n%d",r);
}
2、
#define MAXLEN 14
typedef struct
{char ch[MAXLEN];
int len;
}string;
string connect(string s1,string s2){
string s;
int i;
if(s1.len+s2.len<=MAXLEN)
{
for(i=0;i<s1.len;i++)
s.ch[i]=s1.ch[i];
for(i=0;i<s2.len;i++)
s.ch[s1.len-1+i]=s2.ch[i];
s.len=s1.len+s2.len-1;}
else
s.len=0;
return(s);
}
main()
{string a1={"Beijing",8},a2={"Ching",6};
string a;
a=connect(a1,a2);
printf("\n%s\n%d",a.ch,a.len);}
3、
#define MAXLEN 13
typedef struct
{char ch[MAXLEN];
int len;
}string;
int equal(string s1,string s2){
int i;
if(s1.len!=s2.len)
return (0);
else
{for(i=0;i<s1.len;i++)
if(s1.ch[i]!=s2.ch[i])
return(0);
}
return(1);
}
main()
{string a1={"Beijing",8},a2={"ching",5};
int r;
r=equal(a1,a2);
printf("\n%d",r);
}
\#include <stdio.h>
\#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];
int strLength(SString S) //求串的长度
{int m;
for(m=0;S[m]!='\0';m++);
return m;
}
void StringCopy(SString T,SString S)
{
int i;
for(i=1;i<=strLength(S);i++)
T[i]=S[i];
T[i]='\0';
}
void Replace(SString s, SString s1, SString s2)
{ SString t;
int i,j,f,k=0;
if(strLength(s)>= strLength(s1))
{for(i=0;i<= strLength(s);)
{if(i<= strLength(s)- strLength(s1))
{f=1; //查找
for(j=0;j< strLength(s1);j++)
if(s[i+j]!=s1[j])
{f=0;
break;}
}
else f=0;
if (f==1)
{
for(j=0;j<strLength(s2);j++,k++) //替换
t[k]=s2[j];
i=i+ strLength(s1);
}
else
{t[k]=s[i]; //复制一个字符
k++;
i++;}}}
StringCopy(s,t); //复制字符串
}
void main()
{SString str;
SString temp,substr;
printf("请输入主串:");
scanf("%s",str);
printf("请输入查找的字符串");
scanf("%s",temp);
printf("请输入替换的字符串");
scanf("%s",substr);
Replace(str,temp,substr);
printf("新字符串为");
printf("%s\n",str);
}