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;
}
在运行程序,选择删除串的时候,每次运行玩这个步骤,都会自动执行句,帮我看看哪里错了