打算利用數組實現關於順序串的一些操作,程序源代碼如下:
#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++菜鳥,可能很多問題都很幼稚,求各位不吝指教!謝謝!
int length(char s[]) //3.計算串的長度
{
int i = 0;
if (s[0] = '0')**這裡也是一樣,寫成賦值符號了,改為==**
cout << "該串為空串,請重新輸入!" << endl;
else
{
while (s[i] != '\0')
i++;
cout << "該串長為:" << i << endl;
}
給一個小小的建議,LZ的菜單做的有點復雜,而且很占屏幕,建議在每一個case後面加上
system("CLS")清一下屏
case 'b':
system("CLS")//加在這
output(s1);
break;