我试图在main()中使用这个字符比较函数,同时忽略大小写敏感性。是否有一种方法从main调用to (Ch1)和ch2,以便如果引发-i (大小写不敏感),我可以重用代码。
int CharacterCompare( FILE *file1, FILE *file2, char file1name[], char file2name[] )
{
int ch1, ch2;
int differ = 0;
do
{
ch1 = fgetc( file1 );
ch2 = fgetc( file2 );
differ++;
if ( feof( file1 ) && !feof( file2 ) )
{
printf( "EOF on %s\n", file1name );
return 1;
}
else if ( feof( file2 ) && !feof( file1) )
{
printf( "EOF on %s\n", file2name );
return 1;
}
if (ch1 != ch2)
{
printf( "files differ: char %d\n", differ );
return 1;
}
}
while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (ch1 == ch2) );
printf( "files are equal\n" );
return 0;
}发布于 2014-03-06 09:24:23
很长的答案(没有测试,但你应该知道):
int Compare(char ch1, char ch2, int ignorecase)
{
if (ignorecase)
{
ch1 = toupper(ch1) ;
ch2 = toupper(ch2) ;
}
return ch1 == ch2 ;
}
int CharacterCompare( FILE *file1, FILE *file2, char file1name[], char file2name[],
int ignorecase )
{
int ch1, ch2;
int differ = 0;
do
{
ch1 = fgetc( file1 );
ch2 = fgetc( file2 );
differ++;
if ( feof( file1 ) && !feof( file2 ) )
{
printf( "EOF on %s\n", file1name );
return 1;
}
else if ( feof( file2 ) && !feof( file1) )
{
printf( "EOF on %s\n", file2name );
return 1;
}
if (Compare(ch1, ch2, ignorecase))
{
printf( "files differ: char %d\n", differ );
return 1;
}
}
while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (ch1 == ch2) );
printf( "files are equal\n" );
return 0;
}主要的例子是:
ignorecase = argv[1] == "-i" ;
int different = CharacterCompare(f2, f2, name1, name2, ignorecase) ;发布于 2014-03-06 09:15:53
简短的(也是唯一的)答案是:不,您不能访问在其他函数中本地声明的变量。
相反,将大小写不敏感作为参数传递给函数。
发布于 2014-03-06 09:16:03
通常,如果您需要重用代码,请将其包装在它自己的函数中。
在这种情况下,为什么只需要从toupper main调用
...
if (toupper(ch1) != toupper(ch2))
{
printf( "files differ: char %d\n", differ );
return 1;
}
...
while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (toupper(ch1) == toupper(ch2)) );或者将不区分大小写的比较包装到一个函数中:
int caseinvariantcomp(char c1, char c2) {
return toupper(c1) - toupper(c2);
}
...
if (caseinvariantcomp(ch1, ch2))
{
printf( "files differ: char %d\n", differ );
return 1;
}
...
while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (!caseinvariantcomp(ch1, ch2)) );https://stackoverflow.com/questions/22219792
复制相似问题