打算利用数组实现关于顺序串的一些操作,程序源代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
#include
using namespace std;
#define OK 1
void output(char *s) //2.输出串
{
if(s[1]='0')
cout<<"该串为空串,请重新输入!"<<endl;
else
cout<<s<<endl;
}
void input(char s[]) //1.输入串
{
cout<<"请输入串:"<
cin>>s;
}
int length(char s[]) //3.计算串的长度
{
int i=0;
if(s[0]='0')
cout<<"该串为空串,请重新输入!"<<endl;
else
{
while(s[i]!='\0')
i++;
cout<<"该串长为:"<<i<<endl;
}
return i;
}
void Insert(char s[], int i, char t[]) //4.在串s的第i个位置插入串s1形成串s2
{
char q[255];
strcpy(q,s);
if(i>length(s)-1)
cout<<"插入位置超出串长,请重新输入"<<endl;
else
{
if(length(q)+length(t)>255)
cout<<"overflow"<<endl;
else
{
for(int j=length(q)-1;j>=i;j--)
q[j+length(q)]=q[j];
for(j=0;j<length(t);j++)
q[j+i]=t[j];
}
cout<<q<<endl;
}
}
void del(char s[],int i,int j) //5.从在串s的第i个字符开始连续删除j个字符形成串s3
{
char q[255];
strcpy(q,s);
int len=length(q);
if((i<0)||(i<len))
cout<<"i值不在串长度范围内,不能删除"<<endl;
else
{
for(int k=i+j;k<len;k++)
q[k-j]=q[k];
cout<<q<<endl;
}
}
void replace(char s[],int i,int j,char t[]) //6.将串s的第i个字符开始的j个字符替换成串s1而产生串s4
{
char q[255];
strcpy(q,s);
int lens=length(s);
int lent=length(t);
if((lent>j)||(lens-i<j))
cout<<"串s的剩余长度不足,请重新选择位置i"<<endl;
else
{
for(int k=0;k<j;k++)
q[i-1]=t[k];
cout<<q<<endl;
}
}
void substr(char s[],int i,int j) //7.提取串s的第i个字符开始的j个字符而产生串s5
{
char q[255];
strcpy(q,s);
int lens=length(s);
if((j>lens)||(lens-i<j))
cout<<"串s的剩余长度不足,请重新选择位置i"<<endl;
else
{
char p[255];
for(int k=0;k<j;k++)
{
p[k]=q[i];
i++;
}
cout<<p<<endl;
}
}
void contact(char s[],int i,char t[]) //8.将串s1和串s2连接起来而产生串s6
{
char q[255];
strcpy(q,s);
if(i>length(s)-1)
cout<<"插入位置超出串长,请重新输入"<<endl;
else
{
if(length(q)+length(t)>255)
cout<<"overflow"<<endl;
else
{
for(int j=length(q)-1;j>=i;j--)
q[j+length(q)]=q[j];
for(j=0;j<length(t);j++)
q[j+i]=t[j];
}
}
char p[255];
int lens=length(s);
int lenq=length(q);
if(lens+lenq>255)
cout<<"overflow"<<endl;
else
{
for(int m=0;m<lens-1;m++)
p[m]=s[m];
for(int n=0;n<lenq-1;n++)
p[n+m+1]=q[n];
cout<<p<<endl;
}
}
void index(char s[],char t[]) //9.求子串s1在s中位置
{
int i=0,j=0;
int lens=length(s);
int lent=length(t);
while((i<lens)&&(i<lent))
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
if(j>=lent)
cout<<i-lent<<endl;
else
cout<<"并未在串s中找到与串s1匹配的子串"<<endl;
}
}
char menu() //选择菜单
{
char i;
printf("----------------请选择相应操作:-----------\n");
printf("----------------a.输出串s-----------------\n");
printf("----------------b.输出串s1----------------\n");
printf("----------------c.求s串长-----------------\n");
printf("----------------d.求s1串长----------------\n");
printf("----------------e.在串s的第i个位置插入串s1形成串s2----------------\n");
printf("----------------f.从在串s的第i个字符开始连续删除j个字符形成串s3---------------\n");
printf("----------------g.将串s的第i个字符开始的j个字符替换成串s1而产生串s4-----------\n");
printf("----------------h.提取串s的第i个字符开始的j个字符而产生串s5----------------\n");
printf("----------------i.将串s1和串s2连接起来而产生串s6 ----------------\n");
printf("----------------j.求子串s1在s中位置----------------\n");
i=getch();
return i;
}
void main()
{
char s[255],s1[255];
cout<<"请输入串s:"<<endl;
cin>>s;
cout<<"请输入串s1:"<<endl;
cin>>s1;
while(1)
{
char model=menu();
switch(model)
{
output(s);
break;
case 'b':
output(s1);
break;
case 'c':
length(s);
break;
case 'd':
length(s1);
break;
case 'e':
cout<<"请输入插入位置i:"<<endl;
int i;
cin>>i;
Insert(s,i,s1);
break;
case 'f':
cout<<"请输入插入位置i:"<<endl;
int a;
cin>>a;
cout<<"请输入删除字符数j:"<<endl;
int j;
cin>>j;
del(s,a,j);
break;
case 'g':
cout<<"请输入插入位置i:"<<endl;
int b;
cin>>b;
cout<<"请输入替换字符数j:"<<endl;
int c;
cin>>c;
replace(s,b,c,s1);
break;
case 'h':
cout<<"请输入开始位置i:"<<endl;
int d;
cin>>d;
cout<<"请输入提取字符数j:"<<endl;
int e;
cin>>e;
substr(s,d,e);
break;
case 'i':
cout<<"请输入生成串2时插入的位置i"<<endl;
int f;
cin>>f;
contact(s,f,s1);
break;
case 'j':
index(s,s1);
break;
}
}
}
现在的问题就是不管我字符串输入的是什么,输出和计算长度的函数总是显示“该串为空请重新输入”。
是数组的内容没办法传入吗?我尝试过把算长度的函数改到主函数里面来,但是还是不行,所以是数组的内容没有更新?
C++菜鸟,可能很多问题都很幼稚,求各位不吝指教!谢谢!