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

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 *”

答案:// 串子结构.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(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=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(S);

  else if (choice==3)
  {
   T1=InputStr(T1);
   T2=InputStr(T2);
   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;
}

 

很显然,InputStr函数里面是没有入参的,你看自己定义的

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

上一个:用友元函数做C++
下一个:C++通讯录管理系统

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