求教 c

flamesP 2017-08-09 05:23:57
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXLINE 1000
int getline(char line[],int max);
int strindex(char sourse[],char searchfor[]);

char v[]="ould";

char pattern[]="ould";

int main()
{
char line[MAXLINE];
int found=0;

while(getline(line,MAXLINE)>0)
if(strindex(line,pattern)>=0)
{
printf("%s",line);
found++;
}
return found;
}
int getline(char s[],int lim)
{
int c,i;

i=0;
while(--lim>0&&(c=getchar())!=EOF&&c!='\n')
s[i++]=c;
if(c=='\n')
s[i++]=c;
return i;
}

int strindex(char s[],char t[])
{
int i,j,k;
for(i=0;s[i]!='\0';i++){

for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++);
if(k>0&&t[k]=='\0')
return i;
}
return -1;
}

上述函数是将包含字符“ould”的行打印出来
但是编译过程中,只能输入一行,打印一行
求教
能否改动上面的程序使其一次性输入多行
然后打印出所有包含“ould”的行
...全文
432 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
flamesP 2017-08-25
  • 打赏
  • 举报
回复
引用 8 楼 wyyy2088511 的回复:
[quote=引用 7 楼 flamesP 的回复:] [quote=引用 5 楼 wyyy2088511 的回复:] #include <stdio.h> #include <string.h> #include <ctype.h> #define MAXLINE 1000 int getline(char line[],int max); int strindex(char sourse[],char searchfor[]); char v[]="ould"; char pattern[]="ould"; int main() { char line[5][MAXLINE]={0}; int found=0; for(int i=0; i<5; i++) { getline(line[i],MAXLINE); } for(int i=0; i<5; i++) { if(strindex(line[i],pattern)>=0) { printf("%s",line[i]); //found++; } } getchar(); return found; } int getline(char s[],int lim) { int c,i; i=0; while(--lim>0&&(c=getchar())!=EOF&&c!='\n') s[i++]=c; if(c=='\n') s[i++]=c; return i; } int strindex(char s[],char t[]) { int i,j,k; for(i=0;s[i]!='\0';i++){ for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++); if(k>0&&t[k]=='\0') return i; } return -1; } 如果想输入比较大,数组改大点,或者用vector。
[/quote]strindex在main之前已经声明过的,我是在vs下编译的,没有问题。[/quote] 我用的是dev
flamesP 2017-08-25
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
int strindex(char sourse[],char searchfor[]); 和 int strindex(char *sourse,char *searchfor); 不是一回事!
不懂
赵4老师 2017-08-18
  • 打赏
  • 举报
回复
int strindex(char sourse[],char searchfor[]); 和 int strindex(char *sourse,char *searchfor); 不是一回事!
jena_wy 2017-08-18
  • 打赏
  • 举报
回复
引用 7 楼 flamesP 的回复:
[quote=引用 5 楼 wyyy2088511 的回复:] #include <stdio.h> #include <string.h> #include <ctype.h> #define MAXLINE 1000 int getline(char line[],int max); int strindex(char sourse[],char searchfor[]); char v[]="ould"; char pattern[]="ould"; int main() { char line[5][MAXLINE]={0}; int found=0; for(int i=0; i<5; i++) { getline(line[i],MAXLINE); } for(int i=0; i<5; i++) { if(strindex(line[i],pattern)>=0) { printf("%s",line[i]); //found++; } } getchar(); return found; } int getline(char s[],int lim) { int c,i; i=0; while(--lim>0&&(c=getchar())!=EOF&&c!='\n') s[i++]=c; if(c=='\n') s[i++]=c; return i; } int strindex(char s[],char t[]) { int i,j,k; for(i=0;s[i]!='\0';i++){ for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++); if(k>0&&t[k]=='\0') return i; } return -1; } 如果想输入比较大,数组改大点,或者用vector。
[/quote]strindex在main之前已经声明过的,我是在vs下编译的,没有问题。
flamesP 2017-08-17
  • 打赏
  • 举报
回复
引用 5 楼 wyyy2088511 的回复:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXLINE 1000
int getline(char line[],int max);
int strindex(char sourse[],char searchfor[]);

char v[]="ould";

char pattern[]="ould";

int main()
{
char line[5][MAXLINE]={0};
int found=0;

for(int i=0; i<5; i++)
{
getline(line[i],MAXLINE);

}
for(int i=0; i<5; i++)
{
if(strindex(line[i],pattern)>=0)
{
printf("%s",line[i]);
//found++;
}
}
getchar();
return found;
}
int getline(char s[],int lim)
{
int c,i;

i=0;
while(--lim>0&&(c=getchar())!=EOF&&c!='\n')
s[i++]=c;
if(c=='\n')
s[i++]=c;
return i;
}

int strindex(char s[],char t[])
{
int i,j,k;
for(i=0;s[i]!='\0';i++){

for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++);
if(k>0&&t[k]=='\0')
return i;
}
return -1;
}

如果想输入比较大,数组改大点,或者用vector。




flamesP 2017-08-17
  • 打赏
  • 举报
回复
引用 3 楼 fussier 的回复:
[quote=引用 2 楼 fussier 的回复:]

if(c=='\n')
s[i++]=c;
改成

if(c=='\n')
s[i++]=‘\0’;
strindex 第二个for循环后面有个逗号,我不知道这是不是有意为之,问一下这个函数是干啥的吗?
分号,说错了[/quote] 你的改动好像还是不行 sringdex函数中的第二个for循环后的分号是必要的,它执行的是一个空循环。这个函数的作用是寻找输入中是否含有'ould'字符 如果有,则返回ould在输入字符中第一次出现的位置并打印
jena_wy 2017-08-10
  • 打赏
  • 举报
回复
#include <stdio.h> #include <string.h> #include <ctype.h> #define MAXLINE 1000 int getline(char line[],int max); int strindex(char sourse[],char searchfor[]); char v[]="ould"; char pattern[]="ould"; int main() { char line[5][MAXLINE]={0}; int found=0; for(int i=0; i<5; i++) { getline(line[i],MAXLINE); } for(int i=0; i<5; i++) { if(strindex(line[i],pattern)>=0) { printf("%s",line[i]); //found++; } } getchar(); return found; } int getline(char s[],int lim) { int c,i; i=0; while(--lim>0&&(c=getchar())!=EOF&&c!='\n') s[i++]=c; if(c=='\n') s[i++]=c; return i; } int strindex(char s[],char t[]) { int i,j,k; for(i=0;s[i]!='\0';i++){ for(j=i,k=0;t[k]!='\0'&&s[j]==t[k];j++,k++); if(k>0&&t[k]=='\0') return i; } return -1; } 如果想输入比较大,数组改大点,或者用vector。
jena_wy 2017-08-10
  • 打赏
  • 举报
回复
建立一个二维数组,多次输入,然后保存起来,再进行ould比较包含字串的打印出来。
fussier 2017-08-10
  • 打赏
  • 举报
回复
引用 2 楼 fussier 的回复:

if(c=='\n')
s[i++]=c;
改成

if(c=='\n')
s[i++]=‘\0’;
strindex 第二个for循环后面有个逗号,我不知道这是不是有意为之,问一下这个函数是干啥的吗?
分号,说错了
fussier 2017-08-10
  • 打赏
  • 举报
回复

if(c=='\n')
s[i++]=c;
改成

if(c=='\n')
s[i++]=‘\0’;
strindex 第二个for循环后面有个逗号,我不知道这是不是有意为之,问一下这个函数是干啥的吗?
自信男孩 2017-08-09
  • 打赏
  • 举报
回复
建议用二维数组

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧