Guyueshuicao 2016-04-07 06:46 采纳率: 100%
浏览 1328
已采纳

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++菜鸟,可能很多问题都很幼稚,求各位不吝指教!谢谢!

  • 写回答

2条回答 默认 最新

  • Mikasa_fight 2016-04-07 10:16
    关注
     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条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)