|
Post by huangno1 on Mar 2, 2017 20:55:03 GMT -8
程式說明
Anagram 是一種文字遊戲,把一個單字中的字母重新排列成另一個單字,例如 tone 變成 note,lemon 變成 melon。阿華最近迷上這個遊戲,而且他覺得只有一個單字不過癮,他想要玩一整個句子。因為句子很長,他不想要自己檢查重新排列後的句子是不是由原句組成的,所以他想要你幫忙寫一個功能來判斷。句子中僅含英文字母(大小寫均可)和空白字元,長度不超過20個字元。在判斷時請忽略空白字元。輸入與輸出格式請參見範例。
請撰寫一個支援函式:
isAnagram() 函式:傳入兩個字串 lhs 和 rhs,回傳一個布林 (bool) 值。如果 rhs 是由 lhs 中的字元重新排列而成的,回傳 true;否則回傳 false。
【輸入範例1】
note
tONe
【輸出範例1】
[note] and [tONe] are anagrams.
【輸入範例2】
abc
DAC
【輸出範例2】
[abc] and [DAC] are not anagrams.
【輸入範例3】
abc def
FEdab c
【輸出範例3】
[abc def] and [FEdab c] are anagrams.
#include <stdio.h>
#include <ctype.h>
bool isAnagram(
char lsh [ ] , char rsh [ ]
)
{
int count [ 42 ] = { } ;
int i = 0 , j = 0 , sum = 0 , len_lsh = 0 , len_rsh = 0 ;
while ( lsh [ i ] != '\0' )
{
if ( isalpha ( lsh [ i ] ) )
len_lsh ++ ;
i ++ ;
} i = 0 ;
while ( rsh [ i ] != '\0' )
{
if ( isalpha( rsh [ i ] ) )
len_rsh ++ ;
i ++ ;
} i = 0 ;
if ( len_lsh != len_rsh )
return 0 ;
while ( lsh [ i ] != '\0' )
{
while ( rsh [ j ] != '\0' )
{
if ( tolower ( lsh [ i ] ) == tolower ( rsh [ j ] ) && lsh [ i ] != ' ' )
count [ i ] += 1 ;
j ++ ;
}
i ++ ;
j = 0 ;
}
for ( i = 0 ; i < 42 ; i ++ )
{
if ( count [ i ] > 0 )
sum ++ ;
}
if ( sum == len_lsh )
return 1 ;
else
return 0 ;
}
// ----------------------------------------------
int main()
{
char str[2][21]= {};
for ( int i = 0 ; i < 2 ; i ++ )
gets ( str [ i ] ) ;
printf("[%s] and [%s] are %sanagrams.\n", str[0], str[1], isAnagram(str[0], str[1])?"":"not ");
return 0;
}
|
|