※ 引述《berserk (鬍子)》之銘言:
: 老師要我們寫一個可以判定是否為Palindrome的程式
: 我現在卡在兩個地方
: 一.要如何去除掉輸入句中非字母的字元
: 二.要如何讓原來去除非字母字元的句子跟倒轉過後的句子比對
程式如下...可以跑看看..
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
void main(){
char strword[]="A man,a plan,a canal;panama!"; //輸入的字或句子擺這裡
char *strnew= (char*) malloc (sizeof(strword)); //去掉非字母字元的句子擺這裡
int letters=0; //存句子中字母字元的總數
strlwr(strword); //把句子都改為小寫字母
for(int i=0;i<sizeof(strword);i++){ //這一段為除掉句中非字母字元的方
if(strword[i]<=122 && strword[i]>=97){ //法,原理為子母a-z的ASCII碼為
strnew[letters]=strword[i]; //97-122,只要檢查句中每個字元
letters++; //其ASCII碼是否在上述之範圍即可
} //得知是否為字母,如為字母則存放
} // 在strnew陣列中...
for(int j=0;j<letters;j++){ //此段為比對是否為Palindrome
if(j>letters-1-j){ //的方法,原理為前後字母兩兩比
cout<<"\nThis is a Palindrome.....\n"; //對.....
return;
}
if(strnew[j]!=strnew[letters-1-j]){
cout<<"\nThis is not a Palindrome.....\n";
return;
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.216.84
※ 編輯: mmx 來自: 140.115.216.84 (06/07 02:16)