/*
* 解题思路:
* 又是一道坑人陷阱题 ! 数组要开大才能过、要不然一直报RE错,因为存在重复字符串会超过5000
* 用了两种方法写、不知道为什么第一种是错的、一直过不了OJ,第二种可以过AC!
*/
下面是AC代码:
#include#include #include #define A 1000010 #define B 220 char ss[ A ][ B ]; int cmp_string( const void*_a , const void *_b ) { char *a = ( char * )_a; char *b = ( char * )_b; return strcmp( a,b ); } int main( ) { int p,q,flag; int i; char c; p = q = 0; memset(ss,'\0',sizeof( ss ) ); while( ( c=getchar( ) ) != EOF ) { if( c >='A' && c <='Z' ) c = c-'A'+'a'; if( c >='a' && c <= 'z' ) ss[ p ][ q++ ] = c ; else { ss[ p++ ][ q ] = '\0'; q = 0; } } qsort( ss , p , sizeof( ss[ 0 ] ) , cmp_string ); for( i=0;i
下面一段代码不知道为什么一直WA!
#include#include #include #define A 1100000 #define B 220 char ss[ A ][ B ]; int cmp_string( const void*_a , const void *_b ) { char *a = ( char * )_a; char *b = ( char * )_b; return strcmp( a,b ); } int main( ) { int p,q,flag; int i; char c; p =0; c = '0'; while( c != EOF ) { q = flag = 0; memset( ss[ p ] ,'\0',sizeof( ss[ p ] ) ); while( ( c = getchar( ) ) != '\n' && c!=' ' && c!=EOF ) { if( c >='A' && c <='Z' ) c = c-'A'+'a'; if( c >='a' && c <= 'z' ) ss[ p ][ q++ ] = c ; flag = 1; } if( flag ) p++; } qsort( ss , p , sizeof( ss[ 0 ] ) , cmp_string ); for( i=0;i