#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef char SString[MAXSIZE+1];
//字符串常用的处理函数
//1.strcpy(char str1,char str2): 将一个串的内容复制到另一个串中,返回值为字符型
//2.strlen(char str): 获取串的长度,返回值为int型整数
//3.strcmp(char str1,char str2): 比较两个字符串,若相等返回值为0
//4.strcat(char str1,char str2): 连接两个串,返回值为字符型
//5.SubString(SString &str,SString str1,int pos,int len): 返回str作为str1中pos字符后长度为len的字符串
//6.Index(SString &sub,SString str,int pos):返回串sub的第pos个元素后子串str的位置,若不存在则返回0
//SubString()的实现
void SubString(SString &str,SString str1,int pos,int len)
{
if (pos<1||pos>str1[0]||len<0||len>str1[0]-pos+1)
{
cout<<"pos或len的数据不符合规范!"<<endl;
exit(0);
}
for (int i=pos;i<=len+pos-1;i++) //从str[0]开始存储数据
{
str[i-pos]=str1[i];
}
}
// pos后子串第一次出现的位置
int Index(SString str1,SString str2,int pos) //str2为str1的子串
{
SString sub="0"; //对sub初始化
if (pos>0)
{
int lenstr1=strlen(str1);
int lenstr2=strlen(str2);
int i=pos;
while (i<=lenstr1-lenstr2+1)
{
SubString(sub,str1,i,lenstr2);
if (strcmp(str2,sub)!=0)
i++;
else
return i;
}
}
return 0;
}
void main()
{
SString str="abcdefghijklmn";
SString str1="lmn";
SString str2="0"; //对数组进行初始化,否则系统将会对其初始化为乱码
cout<<"str="<<str<<", "<<"str1="<<str1<<" "<<endl;
cout<<"字符串链接函数strcat()测试:";
cout<<strcat(str,str1);
cout<<endl<<endl;
cout<<"求子字符串SubString()函数的测试:";
SubString(str2,str,2,5);
for (int i=1;i<=strlen(str2);i++)
{
cout<<str2[i]<<" ";
}
cout<<endl<<endl;
cout<<"求子字符串位置Index()函数测试:";
cout<<Index(str,str1,3);
cout<<endl<<endl;
SString str3;
cout<<"字符串赋值strcpy()函数测试:";
cout<<strcpy(str3,str1);
cout<<endl<<endl;
}
using namespace std;
#define MAXSIZE 100
typedef char SString[MAXSIZE+1];
//字符串常用的处理函数
//1.strcpy(char str1,char str2): 将一个串的内容复制到另一个串中,返回值为字符型
//2.strlen(char str): 获取串的长度,返回值为int型整数
//3.strcmp(char str1,char str2): 比较两个字符串,若相等返回值为0
//4.strcat(char str1,char str2): 连接两个串,返回值为字符型
//5.SubString(SString &str,SString str1,int pos,int len): 返回str作为str1中pos字符后长度为len的字符串
//6.Index(SString &sub,SString str,int pos):返回串sub的第pos个元素后子串str的位置,若不存在则返回0
//SubString()的实现
void SubString(SString &str,SString str1,int pos,int len)
{
if (pos<1||pos>str1[0]||len<0||len>str1[0]-pos+1)
{
cout<<"pos或len的数据不符合规范!"<<endl;
exit(0);
}
for (int i=pos;i<=len+pos-1;i++) //从str[0]开始存储数据
{
str[i-pos]=str1[i];
}
}
// pos后子串第一次出现的位置
int Index(SString str1,SString str2,int pos) //str2为str1的子串
{
SString sub="0"; //对sub初始化
if (pos>0)
{
int lenstr1=strlen(str1);
int lenstr2=strlen(str2);
int i=pos;
while (i<=lenstr1-lenstr2+1)
{
SubString(sub,str1,i,lenstr2);
if (strcmp(str2,sub)!=0)
i++;
else
return i;
}
}
return 0;
}
void main()
{
SString str="abcdefghijklmn";
SString str1="lmn";
SString str2="0"; //对数组进行初始化,否则系统将会对其初始化为乱码
cout<<"str="<<str<<", "<<"str1="<<str1<<" "<<endl;
cout<<"字符串链接函数strcat()测试:";
cout<<strcat(str,str1);
cout<<endl<<endl;
cout<<"求子字符串SubString()函数的测试:";
SubString(str2,str,2,5);
for (int i=1;i<=strlen(str2);i++)
{
cout<<str2[i]<<" ";
}
cout<<endl<<endl;
cout<<"求子字符串位置Index()函数测试:";
cout<<Index(str,str1,3);
cout<<endl<<endl;
SString str3;
cout<<"字符串赋值strcpy()函数测试:";
cout<<strcpy(str3,str1);
cout<<endl<<endl;
}