C转CPP的疑问,如何把C写的代码转成CPP写的
玉素甫帖木儿2013/07/03软件综合 IP:黑龙江
C编写的代码如下:
#include<stdio.h>
#include<string.h>
//定义允许输入的最大行数
#define MAX_ROWS 100
//定义每行允许输入的最大字符数
#define MAX_WORDS 100
//定义允许输入关键词的最大字符数
#define MAX_CHARS 20

//声明需要用到的子函数
int read_words(char (*buffer_p)[100]);          //读输入的语句
int read_key(char *key_word);            //读关键词
void output_words(int input_rows,char *key_word,char (*buffer_p)[100],int keyword_len);  //输出含关键词的语句
int main()
{
int input_rows=0;              //输入语句的行数  
int keyword_len=0;              //关键词的长度

char key_word[MAX_CHARS];            //储存关键字的数组
char buffer[MAX_ROWS][MAX_WORDS];          //储存输入文字的数组

char (*buffer_p)[MAX_ROWS];            //指向储存输入文字数组的指针
buffer_p=buffer;              //指针buffer_p赋值储存输入文字数组buffer的首地址
printf("[s:9]lease input the words.\n");         //提示输入文字段
input_rows=read_words(buffer_p);          //读取输入的文字段并把读取的行数返回给input_rows

printf("[s:9]lease input your key-word: \n");        //提示输入关键字
keyword_len=read_key(key_word);           //读取输入的关键词并把它的字符长度返回给keyword_len
printf("\n");              
printf("contains the key word:\n");          //提示将输出含有关键词的语句
output_words(input_rows,key_word,buffer_p,keyword_len);     //输出含有关键词的语句,若没有输出NOT FOUND
return 0;
}

int read_words(char (*buffer_p)[MAX_ROWS])         //读入语句,形参为(*buffer_p)[MAX_ROWS]作为读入数据储存的空间
{
int input_rows=0;
while(input_rows<MAX_ROWS&&gets(buffer_p+input_rows)[0]!='\0')   //输入判断:行数不超过MAX_ROWS且输入行的首字符不为空
{
  input_rows++;              //记录读入的行数
}
if(input_rows==MAX_ROWS)            //判断行数是否等于允许最大值,若为true输出the memory is full
{
  printf("the memory is full.\n");      
}
return input_rows;              //返回读入的行数
}
int read_key(char *key_word)            //读入关键词,形参为key_word作为读入数据储存的空间
{
int keyword_len=0;
scanf("%s",key_word);             //读入关键词并储存到key_word数组中
keyword_len=strlen(key_word);           //将字符串的最后一位设为空格便于以后判断关键词与各种符号的组合
key_word[keyword_len]=32;
key_word[keyword_len+1]='\0';
return keyword_len;              //返回字符串长度(关键字的长度+1)
}
void output_words(int input_rows,char *key_word,char (*buffer_p)[MAX_ROWS],int keyword_len)//输出含有关键词的语句,形参key_word为关键词,(*buffer_p)[MAX_ROWS]为输入语句,keyword_len为关键词长度
{
char *target;                //指向拥有关键字数组的指针
char find_flag=0;               //给定单词找到标志位(1-找到 0-找不到)
int loop=0;                 //当前扫描语句的行数
int d=0;                 //扫描关键词后可能跟的各种符号
for(loop=0;loop<input_rows;loop++)           //扫描输入的所有行语句
{
  key_word[keyword_len]=32;
  for(d=0;d<16;d++)              //扫描关键词后所跟的可能符号
  {
   target=strstr(buffer_p+loop,key_word);
   if(target!=NULL)             //若找到关键词,输出所在行的语句并将find_flag置位
   {
    printf("%s\n",buffer_p+loop);
    find_flag=1;
    break;
   }
   else                
   {
    key_word[keyword_len]++;        
   }
  }
}
if(!find_flag)                //若找不到关键词输出NOT FOUND
{
  printf("NOT FOUND!!!\n");
}
}
编译运行没有问题
我把它改成CPP是这样:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
using namespace std
#define MAX_ROWS 100;                                                  //定义允许输入的最大行数
#define MAX_WORDS 100;                                                //定义每行允许输入的最大字符数
#define MAX_CHARS 20;                                    //定义允许输入关键词的最大字符数
int read_words(char *buffer_p[100]);          //读输入的语句
int read_key(char *key_word);            //读关键词
void output(int input_rows,char *key_word,char (*buffer_p)[100],int keyword_len);  //输出含关键词的语句
int main()
{
int input_rows=0;              //输入语句的行数  
int keyword_len=0;              //关键词的长度
    char key_word[MAX_CHARS];            //储存关键字的数组
char buffer[MAX_ROWS][MAX_WORDS];          //储存输入文字的数组

char (*buffer_p)[MAX_ROWS];            //指向储存输入文字数组的指针
buffer_p=buffer;              //指针buffer_p赋值储存输入文字数组buffer的首地址
cout<<"请输入正文."<<endl;         //提示输入文字段
input_rows=read_words(buffer_p);          //读取输入的文字段并把读取的行数返回给input_rows

cout<<"请输入关键字: "<<endl;        //提示输入关键字
keyword_len=read_key(key_word);           //读取输入的关键词并把它的字符长度返回给keyword_len
cout<<endl;              
cout<<"有关键词:"<<endl;          //提示将输出含有关键词的语句
cout<<output(input_rows,key_word,buffer_p,keyword_len)<<endl;     //输出含有关键词的语句,若没有输出没有
return 0;
}

int read_words(char (*buffer_p)[MAX_ROWS])         //读入语句,形参为(*buffer_p)[MAX_ROWS]作为读入数据储存的空间
{
int input_rows=0;
while(input_rows<MAX_ROWS&&gets(buffer_p+input_rows)[0]!='\0')   //输入判断:行数不超过MAX_ROWS且输入行的首字符不为空
{
  input_rows++;              //记录读入的行数
}
if(input_rows==MAX_ROWS)            //判断行数是否等于允许最大值,若为true输出the memory is full
{
  cout<<"内存已满."<<endl;      
}
return input_rows;              //返回读入的行数
}
int read_key(char *key_word[])            //读入关键词,形参为key_word作为读入数据储存的空间
{
int keyword_len=0;
cin>>key_word[];             //读入关键词并储存到key_word数组中
keyword_len=strlen(key_word);           //将字符串的最后一位设为空格便于以后判断关键词与各种符号的组合
key_word[keyword_len]=32;
key_word[keyword_len+1]='\0';
return keyword_len;              //返回字符串长度(关键字的长度+1)
}
void output(int input_rows,char *key_word,char (*buffer_p)[MAX_ROWS],int keyword_len)//输出含有关键词的语句,形参key_word为关键词,(*buffer_p)[MAX_ROWS]为输入语句,keyword_len为关键词长度
{
char *target;                //指向拥有关键字数组的指针
char find_flag=0;               //给定单词找到标志位(1-找到 0-找不到)
int loop=0;                 //当前扫描语句的行数
int d=0;                 //扫描关键词后可能跟的各种符号
for(loop=0;loop<input_rows;loop++)           //扫描输入的所有行语句
{
  key_word[keyword_len]=32;
  for(d=0;d<16;d++)              //扫描关键词后所跟的可能符号
  {
   target=strstr(buffer_p+loop,key_word);
   if(target!=NULL)             //若找到关键词,输出所在行的语句并将find_flag置位
   {
   cout<<buffer_p+loop<<endl;
    find_flag=1;
    break;
   }
   else                
   {
    key_word[keyword_len]++;        
   }
  }
}
if(!find_flag)                //若找不到关键词输出没有
{
  cout<<"没有"<<endl;
}
}
编译后提示:
C:\Documents and Settings\计算中心\桌面\scp\scp.cpp(19) : error C2144: syntax error : missing ';' before type 'int'
C:\Documents and Settings\计算中心\桌面\scp\scp.cpp(19) : error C2871: 'std' : does not exist or is not a namespace
C:\Documents and Settings\计算中心\桌面\scp\scp.cpp(19) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
scp.obj - 3 error(s), 0 warning(s)
想知道是哪里出了问题,希望大家能给我以指导,感激不尽
来自:计算机科学 / 软件综合
13
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
justkaka
10年11个月前 IP:未同步
543108
vc编译的吧,syntax error : missing ';' before type 'int'就是.c也过不去。

建议装个金山词霸。
-2
科创币
kokming999
2013-07-03
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
daxus
10年11个月前 IP:未同步
543121
没有搞懂LZ为什么要把C转成CPP,如果你只是想要编译通过,那把文件的cpp后缀改成c应该就OK了,make工具一般是根据后缀名来选择用c还是c++编译器的。


另外LZ最好将你的代码用专门的代码格式贴出来,你这样贴出来的格式乱七八糟的,看不明白。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金星凌日
10年11个月前 IP:未同步
543229
根本不用改,C++完全兼容C(当然仅限于源代码)。
那些错误是你乱改出来的。例如,你在using namespace std后面漏了分号。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
今晚吃牛肉
10年11个月前 IP:未同步
543274
……复制粘贴的时候小心一点……你把分号都漏掉了→_→
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
phpskycn
10年11个月前 IP:未同步
543326
C和CPP在语法上是相对兼容的,只是编译处理上有些差异。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
相对论万岁
10年11个月前 IP:未同步
543332
c可以通过,改成cpp同样可以通过
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
天是蓝的
10年11个月前 IP:未同步
543393
我也纳闷为什么要改…
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
warmonkey
10年11个月前 IP:未同步
543395
头文件要改,加入
#ifdef __cplusplus
extern "C" {
#endif

变量和函数

#ifdef __cplusplus
}
#endif
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
玉素甫帖木儿作者
10年11个月前 IP:未同步
543453

修改后的……提示:
c:\\documents and settings\\计算中心\\桌面\\scp\\scp.cpp(46) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
c:\\documents and settings\\计算中心\\桌面\\scp\\scp.cpp(55) : error C2664: 'gets' : cannot convert parameter 1 from 'char (*)[100]' to 'char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\\documents and settings\\计算中心\\桌面\\scp\\scp.cpp(55) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
玉素甫帖木儿作者
10年11个月前 IP:未同步
543454
回 7楼(天是蓝的) 的帖子
计算机实践……[s:275]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
玉素甫帖木儿作者
10年11个月前 IP:未同步
543455
回 8楼(warmonkey) 的帖子
谢谢指导,我发现是我自己改出来的问题[s:275]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
玉素甫帖木儿作者
10年11个月前 IP:未同步
543456
回 3楼(金星凌日) 的帖子
我知错了……
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
玉素甫帖木儿
进士 笔友
文章
25
回复
92
学术分
0
2010/07/30注册,11个月24天前活动

历史发明学爱好者

主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}