主要流程:換小寫,字串內排序,比對抽出原字串,原字串互相排序,輸出
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <algorithm> #include <cstdio> #include <cstring #include <iostream> using namespace std; int main(){ //freopen("input.txt", "r", stdin); char words[1500][30]; //up to 1000 words and 20 letters. char input[30]; int count=0; //count the number of words memset(input,'\0',sizeof(input)); memset(words,'\0',sizeof(words)); while(scanf("%s",input)!=EOF){ if(input[0]=='#'){ count--; break; } strcpy(words[count],input); count++; memset(input,'\0',sizeof(input)); } //換小寫 char words_s[1500][30]={'\0'}; for(int i=0;i<=count;i++){ for(int j=0;j<30;j++){ words_s[i][j]=tolower(words[i][j]); } } //排序 int flag = 0; for(int i=0;i<=count;i++){ for(int j=0;words_s[i][j]!='\0';j++){ for(int k=j+1;k<strlen(words[i]);k++){ if(words_s[i][k]<=words_s[i][j]){ //exchange char tmp; tmp = words_s[i][k]; words_s[i][k] = words_s[i][j]; words_s[i][j] = tmp; } } } } //檢查相同 char words_ok[1500][30]; int is_ananagram; flag=0; memset(words_ok,'\0',sizeof(words_ok)); for(int i=0;i<=count;i++){ is_ananagram=1; for(int j=0;j<=count;j++){ if(strcmp(words_s[i],words_s[j])==0 && i!=j){ is_ananagram=0; break; } } if(is_ananagram==1 || strlen(words_ok[flag])==1){ //是獨立字或為個別字母 strcpy(words_ok[flag],words[i]); flag++; } } int ok_count = flag; //檢查出來的陣列 words_ok 按照字母排序 for(int i=0;i<ok_count;i++){ for(int j=i+1;j<ok_count;j++){ if(strcmp(words_ok[i],words_ok[j])>0) { char tmp[30]; strcpy(tmp,words_ok[i]); strcpy(words_ok[i],words_ok[j]); strcpy(words_ok[j],tmp); } } } /* for(int i=0;i<=count;i++){ for(int j=0;words_s[i][j]!='\0';j++)printf("%c",words_s[i][j]); printf("\n"); } */ for(int i=0;i<ok_count;i++){ //for(int j=0;words_ok[i][j]!='\0';j++) printf("%s",words_ok[i]); printf("\n"); } return 0; }
沒有留言:
發佈留言