AIZU ONLINE JUDGE

AOJ ITP1 9_A(Finding a Word)を解く

AOJ_ITP1_9_A

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の9_A問題をC++とPython で解いてみました。

ITP1 のトピック9では、文字列について学びます。「文字列処理の基礎を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。

問題(9_A: Finding a Word)

問題はリンク先をご覧ください。

AOJ ITP1 9_A問題:Finding a Word

与えられた一連の文字列から、特定の文字列をカウントする問題です。

解答案

C++ プログラム例(ITP1 9_A)

iostream では、空白を区切り文字と認識します。このため string 文字列も、空白を区切り文字として、読み込みます。

読み込んだ文字列が ”END_OF_TEXT” であれば、プログラムを抜けます(17-19行目)。

問題に「なお、大文字と小文字は区別しません。」と記述があるため、英字大文字であれば、英字小文字に変換しています(20-24行目)。

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
	string w;
	cin >> w;

	int answer = 0;

	while (1) {
		string s;
		cin >> s;
		if (s == "END_OF_TEXT") {
			break;
		}
		for (int i = 0; i < s.length(); ++i) {
			if (isupper(s[i])) {
				s[i] = tolower(s[i]);
			}
		}
		if (s == w) {
			++answer;
		}
	}

	cout << answer << endl;

	return 0;
}

Python プログラム例(ITP1 9_A)

Python は、input 関数で1行読み込みます。split で分割して処理を行います。C++ の tolower は、文字に対しての処理ですが、Python の lower メソッドは、文字列に対しての処理であるため、簡単に書けています。

w = input()
answer = 0
while True:
    t = input().split()
    if t[0] == "END_OF_TEXT":
        break
    for word in t:
        if w == word.lower():
            answer += 1

print(answer)

上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。

最後に

トピック9では、トピック8で学んだ「文字」の応用的な話題を扱います。今回のプログラムも(簡単な)検索プログラムと言えます。応用範囲が広がってきました。

引き続き、ITP1 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA