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)
想知道是哪里出了问题,希望大家能给我以指导,感激不尽
200字以内,仅用于支线交流,主线讨论请采用回复功能。