#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp;
int strcomp ( char strin[], char strcp[] );//比较字符串
int strlength( char *s );//求长度
void clean ( char *s );//清空数组
int main( void )
{
int k=0, ci=0, ch=0;//ch为记录换行次数
char strin[20]={"0"}, strcp[20]={"0"};//strin:为存储要查询的字符串 strcp:存储从文件里读取的一个字符串
if( (fp=fopen("E:\\text.txt","r")) == NULL )
{ printf("无法打开该文本文件\n"); return(0); }
for( ; ; )
{
printf("0:退出; 1:进入查询;\n");
scanf("%d",&k);
getchar();
if( 0==k ) exit(0);
printf("请输入要查询的字符或字符串\n");
scanf("%s",strin);
getchar();
while( !feof(fp) )
{
for( ci=0; strcp[ci] != ' '; ci++ )
if( ( strcp[ci]=fgetc(fp) ) == '\n' )
{
ch++;
strcp[ci]=' ';
break;
}
strcp[ci]='\0';
if( strcomp( strin,strcp ) == 1 )
printf("字符串 %s 出现在第 %d 行\n",strin,ch);
clean( strcp );
}
clean( strin );
}
fclose( fp );
return(1);
}
int strlength( char *s )
{
int i=0;
while( *(s++) != '\0' )
i++;
return( i );
}
int strcomp( char strin[], char strcp[] )
{
int i;
if( strlength( strin ) != strlength( strcp ) )
return( 0 );
else
{
for( i=0; i < strlength( strin ); i++ )
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}
void clean( char *s )
{
while( *s != '\0' )
{
*s='\0';
s++;
}
}
----------------解决方案--------------------------------------------------------
复杂的,不懂
----------------解决方案--------------------------------------------------------
程序我没有仔细的看,细看我也看不懂呵呵,文件我都没有学
就发现你的 主函数中的return
好象0是正常返回吧,
[此贴子已经被作者于2006-5-14 13:41:41编辑过]
----------------解决方案--------------------------------------------------------
文件我学得不是很深,让版主老大帮您看看,他准会的,呵呵……
----------------解决方案--------------------------------------------------------
要是到晚上还没人看,我保证看
我一会给个高三学生上课去~~~
没时间啦,逛一会要下了
----------------解决方案--------------------------------------------------------
while( !feof(fp) )
{
for( ci=0; strcp[ci] != ' '; ci++ )
if( ( strcp[ci]=fgetc(fp) ) == '\n' )
{
ch++;
strcp[ci]=' ';
break;
}
太乱了,这段应该有问题
----------------解决方案--------------------------------------------------------
按楼主意思改了下,只判断每行是否和输入串相同
[CODE]
#include "stdio.h"
#include "string.h"
#include "conio.h"
FILE *fp;
int Strcomp ( char strin[], char strcp[] );
int main( void )
{
int i, count;
char strin[20], strcp[20],ch;
while(1)
{
if( (fp=fopen("E:\\text.txt","r")) == NULL ) /*多次打开查询*/
{
printf("无法打开该文本文件\n");
exit(-1);
}
printf("0:退出; 1:进入查询;\n");
scanf("%d",&i);
getch();
if( i==0 )
exit(0);
printf("请输入要查询的字符或字符串\n");
gets(strin);
count=0; /*初始化*/
while( (ch=fgetc(fp)) != -1 )
{
for(i=0 ; ch != '\n' && ch != -1 ; i++,ch=fgetc(fp) )
strcp[i]=ch;
count++;
strcp[i]='\0';
if( Strcomp( strin,strcp ) == 1 )
{
printf("字符串 %s 出现在第 %d 行\n\n",strin,count);
break;
}
} /*清空多余*/
}
fclose( fp );
return 0;
}
int Strcomp( char strin[], char strcp[] ) /*大写*/
{
int i;
if( strlen (strin) != strlen( strcp ) )
return( 0 );
else
{
for( i=0; i < strlen( strin ); i++ ) /*strlen库函数直接用*/
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}
[/CODE]
----------------解决方案--------------------------------------------------------
呵呵,谢了斑竹先
电信宽带实在太烂了,出点问题居然要4天才来修
----------------解决方案--------------------------------------------------------
真的晕了
[CODE]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp;
int strcomp ( char strin[], char strcp[] );
void clean ( char *s );
int main( void )
{
int k=0, ci, ch=1;
char s='0', strin[20]={"0"}, strcp[20]={"0"};
if( (fp=fopen("E:\\text.txt","r")) == NULL )
{ printf("无法打开该文本文件\n"); return(0); }
printf("0:退出; 1:进入查询;\n");
scanf("%d",&k);
getchar();
if( 0==k )
exit(0);
printf("请输入要查询的字符或字符串\n");
gets(strin);
while( !feof(fp) )
{
ci=0;
do
{
s=fgetc(fp);
//printf("%c ....\n",s);
if( s=='\n' )
{
ch++;
break;
}
else if( s==' ' )
break;
else
strcp[ci++] = s;
}while( 1 );
if( strcomp(strin,strcp) == 1 )
printf("字符串 %s 出现在第 %d 行\n",strin,ch);
}
fclose( fp );
return(1);
}
int strcomp( char strin[], char strcp[] )
{
int i;
if( strlen( strin ) != strlen( strcp ) )
return( 0 );
else
{
for( i=0; i < strlen(strin); i++ )
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}
[/CODE]
[此贴子已经被作者于2006-5-19 14:23:52编辑过]
----------------解决方案--------------------------------------------------------
int strcomp( char strin[], char strcp[] )
{
int i;
if( strlen( strin ) != strlen( strcp ) )
return( 0 );
else
{
for( i=0; i < strlen(strin); i++ )
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}
这是干么用的,解释一下得好
----------------解决方案--------------------------------------------------------