当前位置:编程学习 > C/C++ >>

C++问题的疑惑

// 串子结构.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
#include <stdio.h>
#define max 80
typedef struct
{char ch[max];
int len;
}seqstring;

seqstring S,T1,T2,T;


seqstring inputstr(seqstring T)                /*输入字符串*/
 { int i;
   T.len=0;
   printf("请输入字符串:\n");
   gets(T.ch);
   for(i=0;T.ch[i]!='\0';i++)
    T.len++;
   return T;
  }
 void outputstr(seqstring T)      /*输出字符串*/
  { puts(T.ch);
  
 }

 


seqstring concat(seqstring T,seqstring T1,seqstring T2) /*联接字符串*/
{int i,n=max-1;
 if(T1.len+T2.len<n) /* 第一种情况*/
    {
  for(i=0;i<T1.len;i++)
       T.ch[i]=T1.ch[i];
     for(i=0;i<T2.len;i++)
       T.ch[T1.len+i]=T2.ch[i];
       T.len=T1.len+T2.len;
       T.ch[T.len]='\0';
    }
 else if(T1.len<n) //第二种情况
   {
    for(i=0;i<T1.len;i++)
      T.ch[i]=T1.ch[i];
   for(i=0;T1.len+i<n;i++)
      T.ch[T1.len+i]=T2.ch[i];
   T.ch[n]='\0';
      T.len=T1.len+i;
   }
 else
  {
   for(i=0;i<n;i++) //第三种情况
        T.ch[i]=T1.ch[i];
         T.ch[n]='\0';
         T.len=n;
  }
return T;
}

 

seqstring insstr(seqstring S,int i,seqstring T)  /*插入字符串*/
  {int j;
  if(T.len<=0)
    {
  printf("字符串为空!\n");
     return S;
    }
  else if((i<=0)||(i>S.len+1))
    {
  printf("插入位置有错误!\n");
      return S;
    }
  else if (S.len+T.len>=max)
    {
  printf("插入串太长!\n");
      return S;
    }
  else
    {
  for (j=S.len;j>=i-1;j--)
      {
    S.ch[j+T.len]=S.ch[j];
       S.ch[j]='\0'; }
     for(j=0;j<T.len;j++)
       S.ch[i+j-1]=T.ch[j];
       S.len=S.len+T.len;
       puts(S.ch);
     return S;
     }
}

seqstring delstr(seqstring S,int i,int len)   /*删除字符串*/
  {  int j;
      if(i>=S.len)
      { printf("删除串的位置不合理!\n");
       return S;
      }
  else if(i+len-1>S.len)
     {
   printf("删除的串长值太大!\n");
      return S;
     }
  else
    {
  j=i;
     while(S.ch[j-1+len]!='\0')
       { S.ch[j-1]=S.ch[j-1+len];
  j++;
       }
     S.len=S.len-len;
     S.ch[S.len]='\0';
     puts(S.ch);
     return S;
  }
}

int lenstr(seqstring T)                      /*求字符串长度*/
 { return (T.len);
  }

//int equalstr(seqstring T1,seqstring T2)  /*判字符串是否相等*/
/*{int i=0;
 if(T1.len!=T2.len)
    return(0);
 else
   for(i=0;i<T1.len;i++)
     if (T1.ch[i]!=T2.ch[i])
     return(0);
     else
     return(1);
}*/

  seqstring scopy(seqstring T1,seqstring T2,seqstring T)  //**函数复制
{  int i;
 for(i=0;i<T1.len;i++)
       T.ch[i]=T1.ch[i];
     for(i=0;i<T2.len;i++)
    
  
   // T.ch[T1.len+i]=T2.ch[i];
      //strcpy(T1.len,T2.len);
      T1.len=T2.len ; 
  T.ch[T.len]='\0';
 return T;
}


int _tmain(int argc, _TCHAR* argv[])
                               /*主函数*/
{ int i=0,j=1,len=0;
  int YY;
  S.len=0;
  T1.len=0;
  T2.len=0;
 while(j)
   {cout<<"\t\t\t            串子系统"<<endl;
    cout<<"\n\t\t**********************************"<<endl;
    cout<<"\n\t\t*          2------求串长              *"<<endl;
    cout<<"\n\t\t*          3------联接串              *"<<endl;
    cout<<"\n\t\t*          4------复制串              *"<<endl;
    cout<<"\n\t\t*         5-----插入串               *"<<endl;
    cout<<"\n\t\t*         6------删除串               *"<<endl;
    cout<<"\n\t\t*         7------显示串               *"<<endl;
    cout<<"\n\t\t*         0------返  回               *"<<endl;
    cout<<"\n\t\t**********************************\n"<<endl;
    cout<<"\t\t 请输入选项序号(0--7)!";
    cin>>YY;//scanf("%d",&YY);
 getchar();
 
 if (YY==2)
   {   S=inputstr(T);//输入的字符串
    len=lenstr(S);
    len=lenstr(S);
     cout<<"串长为"<<len<<endl;;
   }
else if (YY==3)
   {
  T1=inputstr(T1);
     T2=inputstr(T2);
     S=concat(S,T1,T2);
     cout<<"联接后的字符串为"<<S.ch<<endl;
   }
else if (YY==4)
  {
  T1=inputstr(T1);
     T2=inputstr(T2);
     S=scopy(S,T1,T2);
     cout<<"复制的字符串为:"<<S.ch<<endl;
   }
else if (YY==5)
   {
    S=inputstr(S);
    T=inputstr(T);
    printf("请输入插入位置i :");
    cin>>i;getchar();
    S=insstr(S,i,T);
   }

else if (YY==7)
{
 //cout<<""<<T.ch <<endl;
     inputstr(T);
      //puts(T.ch);
 
                      
}
else if (YY==0) 
{  j=0;
cout<<"\t\t 请输入选项序号(0--7)!";

 getchar();
               
}
 


else if (YY=6)
   {
    S=inputstr(S);
    cout<<"请输入删除子串的位置i及长度len(之间用逗号隔开):";
    cin>>i>>len;
 //scanf("%d,%d",&i,&len);
 
    S=delstr(S,i,len);
   getchar();
}


else
printf("\n\t\t 输入的选项号有误!\n");
}
 return 0;
}

在运行程序,选择删除串的时候,每次运行玩这个步骤,都会自动执行句,帮我看看哪里错了

答案://你运行下,没问题啊

// #include "stdafx.h"
#include<iostream>
using namespace std;
#include <stdio.h>
#define max 80
typedef struct
{char ch[max];
int len;
}seqstring;

seqstring S,T1,T2,T;


seqstring inputstr(seqstring T)                /*输入字符串*/
 { int i;
   T.len=0;
   printf("请输入字符串:\n");
   gets(T.ch);
   for(i=0;T.ch[i]!='\0';i++)
    T.len++;
   return T;
  }
 void outputstr(seqstring T)      /*输出字符串*/
  { puts(T.ch);
  
 }

 


seqstring concat(seqstring T,seqstring T1,seqstring T2) /*联接字符串*/
{int i,n=max-1;
 if(T1.len+T2.len<n) /* 第一种情况*/
    {
  for(i=0;i<T1.len;i++)
       T.ch[i]=T1.ch[i];
     for(i=0;i<T2.len;i++)
       T.ch[T1.len+i]=T2.ch[i];
       T.len=T1.len+T2.len;
       T.ch[T.len]='\0';
    }
 else if(T1.len<n) //第二种情况
   {
    for(i=0;i<T1.len;i++)
      T.ch[i]=T1.ch[i];
   for(i=0;T1.len+i<n;i++)
      T.ch[T1.len+i]=T2.ch[i];
   T.ch[n]='\0';
      T.len=T1.len+i;
   }
 else
  {
   for(i=0;i<n;i++) //第三种情况
        T.ch[i]=T1.ch[i];
         T.ch[n]='\0';
         T.len=n;
  }
return T;
}

 

seqstring insstr(seqstring S,int i,seqstring T)  /*插入字符串*/
  {int j;
  if(T.len<=0)
    {
  printf("字符串为空!\n");
     return S;
    }
  else if((i<=0)||(i>S.len+1))
    {
  printf("插入位置有错误!\n");
      return S;
    }
  else if (S.len+T.len>=max)
    {
  printf("插入串太长!\n");
      return S;
    }
  else
    {
  for (j=S.len;j>=i-1;j--)
      {
    S.ch[j+T.len]=S.ch[j];
       S.ch[j]='\0'; }
     for(j=0;j<T.len;j++)
       S.ch[i+j-1]=T.ch[j];
       S.len=S.len+T.len;
       puts(S.ch);
     return S;
     }
}

seqstring delstr(seqstring S,int i,int len)   /*删除字符串*/
  {  int j;
      if(i>=S.len)
      { printf("删除串的位置不合理!\n");
       return S;
      }
  else if(i+len-1>S.len)
     {
   printf("删除的串长值太大!\n");
      return S;
     }
  else
    {
  j=i;
     while(S.ch[j-1+len]!='\0')
       { S.ch[j-1]=S.ch[j-1+len];
  j++;
       }
     S.len=S.len-len;
     S.ch[S.len]='\0';
     puts(S.ch);
     return S;
  }
}

int lenstr(seqstring T)                      /*求字符串长度*/
 { return (T.len);
  }

//int equalstr(seqstring T1,seqstring T2)  /*判字符串是否相等*/
/*{int i=0;
 if(T1.len!=T2.len)
    return(0);
 else
   for(i=0;i<T1.len;i++)
     if (T1.ch[i]!=T2.ch[i])
     return(0);
     else
     return(1);
}*/

  seqstring scopy(seqstring T1,seqstring T2,seqstring T)  //**函数复制
{  int i;
 for(i=0;i<T1.len;i++)
       T.ch[i]=T1.ch[i];
     for(i=0;i<T2.len;i++)
    
  
   // T.ch[T1.len+i]=T2.ch[i];
      //strcpy(T1.len,T2.len);
      T1.len=T2.len ; 
  T.ch[T.len]='\0';
 return T;
}


int main(int argc, char* argv[])
                               /*主函数*/
{ int i=0,j=1,len=0;
  int YY;
  S.len=0;
  T1.len=0;
  T2.len=0;
 while(j)
   {cout<<"\t\t\t            串子系统"<<endl;
    cout<<"\n\t\t**********************************"<<endl;
    cout<<"\n\t\t*          2------求串长              *"<<endl;
    cout<<"\n\t\t*          3------联接串              *"<<endl;
    cout<<"\n\t\t*          4------复制串              *"<<endl;
    cout<<"\n\t\t*          5-----插入串               *"<<endl;
    cout<<"\n\t\t*          6------删除串              *"<<endl;
    cout<<"\n\t\t*          7------显示串              *"<<endl;
    cout<<"\n\t\t*          0------返  回              *"<<endl;
    cout<<"\n\t\t**********************************\n"<<endl;
    cout<<"\t\t 请输入选项序号(0--7):";
    cin>>YY;//scanf("%d",&YY);
 getchar();
 if (YY==2)
   {   S=inputstr(T);//输入的字符串
    len=lenstr(S);
    len=lenstr(S);
     cout<<"串长为"<<len<<endl;;
   }
else if (YY==3)
   {
  T1=inputstr(T1);
     T2=inputstr(T2);
     S=concat(S,T1,T2);
     cout<<"联接后的字符串为"<<S.ch<<endl;
   }
else if (YY==4)
  {
  T1=inputstr(T1);
     T2=inputstr(T2);
     S=scopy(S,T1,T2);
     cout<

上一个:C++代码求解释
下一个:3道C++编程

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,