c++问题的求解
// 串子结构.cpp : 定义控制台应用程序的入口点。//
#include "stdafx.h"
#include <stdio.h>
#define MAXSIZE 80
typedef struct
{char ch[MAXSIZE];
int len;
}SEQSTRING;
SEQSTRING S,T1,T2,T;
SEQSTRING InputStr() /*输入字符串*/
{ 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=MAXSIZE-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>=MAXSIZE)
{
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);
}
}
int _tmain(int argc, _TCHAR* argv[])
/*主函数*/
{ int i=0,j=1,len=0,l;
int choice;
S.len=0;
T1.len=0;
T2.len=0;
while(j)
{printf("\t\t\t 串子系统\n");
printf("\n\t\t**********************************");
printf("\n\t\t* 1------输入串 *");
printf("\n\t\t* 2------求串长 *");
printf("\n\t\t* 3------联接串 *");
printf("\n\t\t* 7------插入串 *");
printf("\n\t\t* 8------删除串 *");
printf("\n\t\t* 9------显示串 *");
printf("\n\t\t* 0------返 回 *");
printf("\n\t\t**********************************\n");
printf("\t\t 请输入选项序号(0--9)!");
scanf("%d",&choice);getchar();
if(choice==1)
S=InputStr();
else if (choice==3)
{ T1=InputStr();
T2=InputStr();
S=Concat(S,T1,T2);
printf("联接后的字符串为:%s\n",S.ch);
}
else if (choice==7)
{
S=InputStr(S);
T=InputStr(T);
printf("请输入插入位置i :");
scanf("%d",&i);getchar();
S=InsStr(S,i,T);
}
else if (choice==8)
{
S=InputStr(S);
printf("请输入删除子串的位置i及长度len(之间用逗号隔开):");
scanf("%d,%d",&i,&len);getchar();
S=DelStr(S,i,len);
}
else if (choice==9)
OutputStr(S);
else if (choice==0)
j=0;
else
printf("\n\t\t 输入的选项号有误!\n");
}
return 0;
}
错误提示:
1>e:\串子结构\串子结构\串子结构.cpp(150) : error C2660: “InputStr”: 函数不接受 1 个参数
1>e:\串子结构\串子结构\串子结构.cpp(151) : error C2660: “InputStr”: 函数不接受 1 个参数
1>e:\串子结构\串子结构\串子结构.cpp(158) : error C2660: “InputStr”: 函数不接受 1 个参数
追问:// 串子结构.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);
}
}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);
T.ch[T.len]='\0';
return T;
}
int _tmain(int argc, _TCHAR* argv[])
/*主函数*/
{ int i=0,j=1,len=0;
int choice;
S.len=0;
T1.len=0;
T2.len=0;
while(j)
{cout<<"\t\t\t 串子系统\n";
cout<<"\n\t\t**********************************"<<endl;
cout<<"\n\t\t* 2------求串长 *"<<endl;
cout<<"\n\t\t* 3------联接串 *"<<endl;
cout<<"\n\t\t* 7------插入串 *"<<endl;
cout<<"\n\t\t* 8------删除串 *"<<endl;
cout<<"\n\t\t* 9------显示串 *"<<endl;
cout<<"\n\t\t* 0------返 回 *"<<endl;
cout<<"\n\t\t**********************************\n"<<endl;
cout<<"\t\t 请输入选项序号(0--9)!";
scanf("%d",&choice);
getchar();if (choice==2)
{
len=lenstr(S);
cout<<"串长为:%d\n"<<len<<endl;;
}
else if (choice==3)
{
T1=inputstr(T1);
T2=inputstr(T2);
S=concat(S,T1,T2);
cout<<"联接后的字符串为:%s\n"<<S.ch<<endl;
}
else if (choice==7)
{
S=inputstr(S);
T=inputstr(T);
printf("请输入插入位置i :");
scanf("%d",&i);getchar();
S=insstr(S,i,T);
}
else if (choice==8)
{
S=inputstr(S);
cout<<"请输入删除子串的位置i及长度len(之间用逗号隔开):";
scanf("%d,%d",&i,&len);getchar();
S=delstr(S,i,len);
}
else if (choice==9)
outputstr(S);
else if (choice==0)
j=0;
else
cout<<"\n\t\t 输入的选项号有误!\n";
}return 0;
}
帮我看看函数复制哪里错了。我改了很多次
strcpy”: 不能将参数 1 从“int”转换为“char *”