预习要点:
① 串赋值Assign(s,t):将一个值赋给串s。
② 销毁串DestroyStr(s):释放串s占用的内存空间。
③ 串复制StrCopy(s,t):将一个串t赋给串s。
④ 求串长StrLength(s):返回串s的长度。
⑤ 判断串相等StrEqual(s,t):两个串s和t相等时返回1;否则返回0。
⑥ 串连接Concat(s,t):返回串s和串t连接的结果。
⑦ 求子串SubStr (s,i,j):返回串s的第i个位置开始的j个字符组成的串。
⑧ 查找定位位置Index(s,t):返回子串t在主串s中的位置。
⑨ 子串插入InsStr(s,i,t):将子串t插入到串s的第i个位置。
⑩ 子串删除DelStr(s,i,j):删除串s中从第i个位置开始的j个字符。
⑪ 子串替换RepStrAll(s,s1,s2):将串s中所有出现的子串s1均替换成s2。
⑫ 输出串DispStr(s):显示串s的所有字符。
实验(训)仪器、软件、设备和器材:
① 计算机DELL
② Dev-C++
实验(训)内容 :
①定义顺序串A,结构体内包含两个成员,存储数据的数组和字符串的长度。
②给这个顺序串赋值。
③再定义令外一个顺序串B,将A串的内容复制到B串。
④ 求A串与B串的长度。
⑤ 判断A串与B串是否相等,
如果A串>B串,返回1;
如果A串<B串,返回1;
如果A串=B串,返回0.
⑥ 将B串接在A串后面,返回C串。。
⑦ 求A串中的子串SubStr (A,i,j):返回串A的第i个位置开始的j个字符组成的串。
⑧ 模式匹配------查找定位位置Index(A,t):
返回子串t在主串A中的位置。
⑨ 输出串DispStr(A):显示串A的所有字符。
//
// main.cpp
// 字符串上机
//
// Created by 孙贤超 on 2019/5/18.
// Copyright © 2019 孙贤超. All rights reserved.
//
#include<stdio.h>
#define maxsize 100
typedef struct{
char ch[maxsize];
int n;
}SeqString;
void Assign(SeqString &L,char ch1[]);
void DisqStr(SeqString &L);
int concat(SeqString &L,char ch2[]);
void Strlength(SeqString &L);
void StrEqual(SeqString &L,char ch2[],int i);
void Index (SeqString &L,char ch3[]);
void InsStr(SeqString &L,int n,int m);
int main(){
int i,m,n;
char ch1[100],ch2[5]="efgh",ch3[4]="efg";
SeqString L;
printf("请输入一个字符串:\n");
gets(ch1);
Assign(L,ch1);
DisqStr(L);
Strlength(L);
StrEqual(L,ch2,i);
i=concat(L,ch2);
printf("请问要查找第几个位置开始的几个字符:\n");
scanf("%d %d",&n,&m);
InsStr(L,n,m);
Index(L,ch3);
DisqStr(L);
}
void Assign(SeqString &L,char ch1[]){ // 数组赋值给字符串
int i=0;
while(ch1[i]!='\0'){
L.ch[i]=ch1[i];
i++;
}
L.n=i;
}
void DisqStr(SeqString &L){ // 输出串
printf("L.ch的字符串为:");
for(int i=0;i<L.n;i++){
printf("%c",L.ch[i]);
}
printf("\n");
}
int concat(SeqString &L,char ch2[]){ //串连接
int i=0,j,m;
m=L.n;
while(ch2[i]!='\0'){
i++;
m++;
}
for(j=0;j<i;j++){
L.ch[j+L.n]=ch2[j];
}
printf("将串ch2连接到L.ch后面,得到的新的字符串为:\n%s\n",L.ch);
L.n=m;
return i;
}
void Strlength(SeqString &L){ //求串长
printf("字符串L.ch的长度为:%d\n",L.n);
}
void StrEqual(SeqString &L,char ch2[],int i){ //判断串相等
int k=0,a;
a=L.n>=i?L.n:i;
printf("判断L.ch和ch2的字符串是否相等!\n结果为:");
for(int j=0;j<a;j++){
if(L.ch[j]==ch2[j]){
k++;
}else if(L.ch[j]>ch2[j]){
printf("1\n");
break;
}else {
printf("-1\n");
break;
}
}
if(k==a){
printf("0\n");
}
}
void Index (SeqString &L,char ch3[]){
int n=0,i,j,k;
while(ch3[n]!='\0'){
n++ ;
}
for(i=0;i<L.n-n;i++){
for(j=0,k=i;j<n;j++,k++){
if(ch3[j]!=L.ch[k]){
break;
} }
if(j==n){
printf("ch3字符串是从L.ch字符串中的第%d位置到第%d的位置\n",i+1,i+n);
}
}
return;
}
void InsStr(SeqString &L,int n,int m){ //串的查找
int i;
printf("L.ch字符串第%d个位置开始的%d个字符为:\n",n,m);
for(i=n-1;i<n+m-1;i++){
printf("%c",L.ch[i]);
}
printf("\n");
}