插入元素输出之后变成了矩形框架或者变成了汉字,表示自闭了
#include<stdio.h>
#include<stdlib.h>
#define maxSize 100 //串字符数组最大长度
typedef struct{
char ch[maxSize]; //顺序串的存储数组
int length; //顺序串的实际长度
}SeqString;
//初始化字符串
void createSeqString(SeqString &s){
s.length=0;
}
//给字符串赋值
void inputSeqString(SeqString &s){
int i=0;
char ch1;
printf("请输入字符串s(输入#结束):\n");
while ((ch1=getchar())!='#'){
s.ch[i]=ch1;
i++;
}
s.ch[i]='\0';
s.length=i;
}
//输出长度
int LengthSeqString(SeqString &s){
return s.length;
}
//输出字符串
void printSeqString(SeqString &s) {
for(int i=0;i<s.length;i++){
printf("%c",s.ch[i]);
}
printf("\n");
}
//复制字符串
void copySeqString(SeqString &s,SeqString &t){
int i,j;//i表示开始复制的位置,j表示复制个数
printf("请输入复制开始位置i:");
scanf("%d",&i);
printf("请输入复制的个数j:");
scanf("%d",&j);
int k=1,n,x=i-1;
if(i<1||i>s.length||j<1||j>s.length) printf("错误!");
else{
for(n=0;n<j;n++,x++){
t.ch[n]=s.ch[x];
k++;
}
}
t.length=k;
printf("字符串的t的内容为:");
printSeqString(t);
}
//判断两个字符串的大小
int sizeSeqString (SeqString &s,SeqString &t){
for(int i=0,j=0;i<s.length,j<t.length;i++,j++){
if(s.ch[i]>t.ch[j])
return 1;
if(s.ch[i]==t.ch[j])
return 0;
if(s.ch[i]<t.ch[j])
return -1;
}
}
//两个字符串连接
void concatSeqString(SeqString &s,SeqString &t){
SeqString s1;
int i,j;
for(i=0;i<s.length;i++){
s1.ch[i]=s.ch[i];
}
for(i=s.length,j=0;j<t.length;j++){
s1.ch[i+j]=t.ch[j];
}
s1.ch[i+j]='\0';
s1.length=s.length+t.length;
printf("两个字符串连接之后s1的长度为:%d\n",s1.length);
printf("字符串的s1的内容为:");
printSeqString(s1);
}
//查找在串s的第i个位置开始的j个字符组成的串
void subSeqString(SeqString &s){
SeqString s2;
int i,j;//i表示开始的位置,j表示个数
printf("请输入查找开始位置i:");
scanf("%d",&i);
printf("请输入个数j:");
scanf("%d",&j);
int k=0;
if(i<1||i>s.length||j<1||j>s.length) printf("错误!");
for(k;k<j;k++){
s2.ch[k]=s.ch[i-1+k];
}
s2.length=j;
printf("子串s2的长度为:%d\n",s2.length);
printf("字符串的s2的内容为:");
printSeqString(s2);
}
//插入子串s5于主串s中
void InSeqString (SeqString &s){
SeqString s2;
int i,j;//i表示开始的位置,j表示个数
printf("请输入插入开始位置i:");
scanf("%d",&i);
int a[s.length-i+1];
for(int n=0;n<s.length-i+1;n++){
a[n]=s.ch[n+i-1];
}
for(int n=0;n<s2.length;n++){
s.ch[n+i-1]=s2.ch[n];
}
for(int n=0;n<s.length-i+1;n++){
s.ch[i+j-1+n]=a[n];
}
s.length=s.length+j;
printf("将a插在s的第%d个位置构成的字符串为:",i);
printSeqString(s);
}
//删除串s中第i个位置开始的j个字符串
void DelSeqString(SeqString &s){
SeqString s3;
int i,j;//i表示开始的位置,j表示个数
printf("请输入删除开始位置i:");
scanf("%d",&i);
printf("请输入个数j:");
scanf("%d",&j);
int k=0;
if(i<1||i>s.length||j<1||j>s.length) printf("错误!");
s.length=s.length-j;
for(int n=i;n<=s.length;n++){
s.ch[n-1]=s.ch[n+j-1];
}
printf("删除第%d个位置的%d个字符之后组成新的字符串为:",i,j);
printSeqString(s);
}
//返回子串s4在主串s中的位置(BF匹配模式)
int IndexSeqString (SeqString &s){
SeqString s4;
int i,j,k;
char ch4;
printf("请输入字符串s(输入#结束):\n");
while ((ch4=getchar())!='#'){
s4.ch[i]=ch4;
i++;
}
s4.ch[i]='\0';
s4.length=i;
for(int i=0;i<s.length-s4.length;i++){
for(k=i,j=0;j<s4.length;k++,j++)
if(s.ch[k]!=s4.ch[j]) break;
if(j==s4.length)
printf("shi %d sdzifuchuan",i);
}
return -1;
}
main(){
SeqString s;
SeqString t;
int k;
createSeqString(s);
inputSeqString(s);
printf("s字符串的长度:%d\n",s.length);
printf("字符串的s的内容为:");
printSeqString(s);
copySeqString(s,t);
printf("t字符串的长度:%d\n",t.length);
sizeSeqString(s,t);
concatSeqString(s,t);
subSeqString(s);
InSeqString(s);
DelSeqString(s);
IndexSeqString(s);
}