C/C++の宿題片付けます 128代目

このエントリーをはてなブックマークに追加
107デフォルトの名無しさん
[1] 授業単元 C言語
[2] 問題文 回文の判断をせよ
ただ、小文字、大文字の区別はしない、記号、空白も考えない。

Madam, I’m Adam
Able was I ere I saw Elba
この二つの文は回文である。 Ad czv zC Daのような文も回文

[3] 環境
 [3.1] OS Windows
 [3.2] コンパイラ名とバージョン VisualC++
 [3.3] 言語 C
[4] 期限: 6月29日

108デフォルトの名無しさん:2009/06/27(土) 16:01:45
>>107
眠りながら適当に書いた
#include<iostream>
#include<algorithm>
#include<string>
#include<cctype>
#include<functional>
int main(){
    std::string line;
    getline(std::cin,line);
    std::string tmp = line;
    tmp.erase(std::remove_if(tmp.begin(),tmp.end(),std::not1(std::ptr_fun(std::isalpha))),tmp.end());
    std::transform(tmp.begin(),tmp.end(),tmp.begin(),std::toupper);
    std::cout << (std::equal(tmp.begin(),tmp.end(),tmp.rbegin()) ? "回文です" : "回文じゃないです") << std::endl;
}
109デフォルトの名無しさん:2009/06/27(土) 16:02:35
おおっとすまん課題はC言語だったか。適当に書き直すわー
110デフォルトの名無しさん:2009/06/27(土) 16:03:34
111デフォルトの名無しさん:2009/06/27(土) 16:15:54
書いてるうちに他の人が書いたけど悔しいから出してみる
#include<stdio.h>
#include<ctype.h>
#include<string.h>
void copyAlpha(char*dst,const char*src){
while(*dst = *src)if(isalpha(*src++))++dst;
}
void lowerCase(char*dst){
for(;*dst;++dst)*dst=tolower(*dst);
}
void reverseStr(char*dst,const char*src){
0[dst += strlen(src)]=0;
while(*src)*--dst=*src++;
}
int main(){
char src[80],rev[80];
gets(src);
copyAlpha(src,src);
lowerCase(src);
reverseStr(rev,src);
puts(strcmp(rev,src)==0 ? "回文です" : "回文じゃないです");
}