内容
编写程序实现字符串的基本运算:
(1) 求串的长度、两串连接、串比较、子串匹配;
(2) 用库函数直接实现上一步的字符申操作
完整代码
#include <iostream>
#include <stdio.h>
#include<string.h>
using namespace std;
#define MAX 256
int StrLength(char s[])
{int i=0;while(s[i]!='\0')
i++;return i;}
int StrConcat1(char s1[],char s2[], char s[])
{//把两个串、1和s2首尾连接成一个新串s
int i=0,j,len1,len2;
len1=StrLength(s1);
len2=StrLength(s1);
if(len1+len2>MAX-1) return 0;
while(s1[i]!='\0')
{s[i]=s1[i];i++;}
j=0;
while(s2[j]!='\0')
{s[i]=s2[j];i++;j++;}
s[i]='\0'; return 1;}
int Strcomp(char *s1,char *s2)
{
while (*s1==*s2)
{if(*s1=='\0')
{return 0;}
s1++;s2++;}
return *s1-*s2;}
int StrIndex_BF(char s[],char t[])
{int i=0,j=0,len1,len2;
len1=StrLength(s);
len2=StrLength(t);
while(i<len1&&j<len2)
if(s[i]==t[j])
{i++;j++;}
else {i=i-j+2;j=1;}
if(j>=len2) return (i-j);
else return -1;}
int StrIndex_KMP(char s[],char t[],int pos,int next[])
{int i=pos,j=1;while(i<=s[0]&&j<=t[0])
if(j==0||s[i]==t[j])
{i++;j++;}
else j=next[j];
if(j<t[0]) return (i-t[0]);
else return 0;}
int main()
{char s1[]="hello world";
char s3[]="0";
char s4[]="hello";
char s5[]="world";
cout<<StrLength(s1)<<endl;
StrConcat1(s4,s5,s3);
printf("%s",s3);cout<<endl;
char s2[]="yes yes";
cout<<Strcomp(s4,s5)<<endl; //比较的是字母大小,哪个不一样就比哪个
char s[]="aaaaaaabc";
char t[]="aabc";char b[]="b";
cout<<StrIndex_BF(s,t)<<endl;//返回的是第一个对应的数组下标
cout<<"**********************"<<endl;
//求串长cout<<strlen(s5)<<endl;
//两串连接strcat(s4,s5);
printf("%s",s4);cout<<endl;
//串比较
cout<<strcasecmp(s4,s)<<endl;//比较的是字符串长度,只返回1,0,-1
//子串匹配
cout<<strstr(s,b);//返回的是s中第一次出现b中的地址所对应的内容
return 0;
}