ページ 1 / 1
英単語のソートプログラムについて
Posted: 2011年4月28日(木) 15:51
by 緑、許さない絶対にだ
「一行ごとに一単語(英単語)が書かれたファイルがある。
このとき、このファイルの内容をソートとして画面上に標準出力するプログラムを作成せよ。
ファイルの行数は不定とし、また上限を定めないこと。
また、ソートは降順あるいは、昇順のどちらにも対応できること。」
ちなみにファイルの読み込みは1回、単語格納のための配列は使ってはいけない、qsortは使ってはいけない
という条件付きです。
手順はだいたいわかるんですが、どのような関数を使ったりとかがわかりません
よろしければ誰か分かる人がいれば教えてください。お願いします。
Re: 英単語のソートプログラムについて
Posted: 2011年4月28日(木) 16:09
by non
緑、許さない絶対にだ さんが書きました:手順はだいたいわかるんですが、どのような関数を使ったりとかがわかりません
どのような手順なのか、教えてもらえますか。
また、
緑、許さない絶対にだ さんが書きました:単語格納のための配列は使ってはいけない
ってのは、配列でなければ、メモリーにすべて読み込んでもいいのですか?
でも、ファイルの数の上限がないですよね。すべて、メモリーに読み込むことはできませんよね。
でも、ファイルは1回しか読み込めない。さて、困った。思いつかない。
Re: 英単語のソートプログラムについて
Posted: 2011年4月28日(木) 16:41
by softya(ソフト屋)
配列は使えないとのことですが、ツリー構造やリスト構造はOKなのでしょうか?
それとファイルの行数が不定ならメモリに読み込めませんので、ソート中の情報をファイルに作るというかなり面倒で低速な処理になると思われますが、その認識でよろしいですか?
Re: 英単語のソートプログラムについて
Posted: 2011年4月29日(金) 01:52
by たかぎ
一応作ってみましたが、ファイルの行数は、使用可能なメモリで上限が決まってしまいます。
また、辞書を作るのが面倒だったので、入力された文字列が英単語として妥当かどうかの判定も行っていません。
使い方はソースから読み取ってください。
あと、言語不明なので、勝手にC++だと判断しました。
コード:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <exception>
int main(int argc, char* argv[])
try
{
std::vector<std::string> v;
while (std::cin)
{
std::string s;
std::getline(std::cin, s);
if (!s.empty())
v.push_back(s);
}
std::sort(v.begin(), v.end());
if (argc < 2 || *argv[1] != 'd')
std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
else
std::copy(v.rbegin(), v.rend(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
Re: 英単語のソートプログラムについて
Posted: 2011年4月29日(金) 09:36
by たいちう
私も作ってみました。main関数のみ載せます。
コード:
int main(int argc, char* argv[]) {
set<string> words;
ifstream ifs(argv[1]);
while (!ifs.eof()) {
string buf;
getline(ifs, buf);
words.insert(buf);
}
for (set<string>::iterator it = words.begin(); it != words.end(); it++)
cout << *it << endl;
return 0;
}
Re: 英単語のソートプログラムについて
Posted: 2011年4月29日(金) 09:39
by たいちう
問題を読み返してみると「ソートは降順あるいは、昇順のどちらにも対応できること。」に対応してませんね。
逆順の場合はbegin()とend()のずれに注意してforを逆にしてください。
Re: 英単語のソートプログラムについて
Posted: 2011年4月30日(土) 02:09
by 緑、許さない絶対にだ
皆さん色々と意見どうもありがとうございます。とても参考になります。
ただ自分が習っていない関数なども多々有り、正直いまいちわからないです。
そして書き忘れてしまって申し訳ありませんが言語はC言語で、
自分はリストを作ってそこに単語を格納してソートの手順でしようと思っています。
しかし、上手くリストに単語を格納してソートするためにどうプログラムをくめばいいのかがわかりません。
色々ミスがあってスイマセンが引き続き教えてもらえないでしょうか、お願いします
Re: 英単語のソートプログラムについて
Posted: 2011年4月30日(土) 09:51
by たかぎ
緑、許さない絶対にだ さんが書きました:正直いまいちわからないです。
ということはある程度はわかるのですね。
どこまでわかったのかを説明してみてください。