程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 順序串-C++菜鳥關於利用數組實現字符串相關操作的提問

順序串-C++菜鳥關於利用數組實現字符串相關操作的提問

編輯:編程解疑
C++菜鳥關於利用數組實現字符串相關操作的提問

打算利用數組實現關於順序串的一些操作,程序源代碼如下:

#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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved