この問題をとくには?

解決


恭子  2004-11-22 07:50:52  No: 55253

標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、空行は出力しないで下さい。また、同じ長さの行は入力した順番に出しなさい。
この問題がどうしても分かりません。教えてください(><;)


瀬戸っぷ  2004-11-22 08:28:54  No: 55254

http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+18210

コレっすか?


monkey  2004-11-22 09:43:21  No: 55255

> コレっすか?

'コレ'に回答したmonkeyです^^
あちらとほぼ同じですが、「同じ長さの行は入力した順番」という要件が加わったので、文字列を格納するのには"vector"を使い、ソートには"stable_sort"を使うのが良いでしょう。
また、「空行は出力しない」ということは、「空行も格納はする」と解釈した方が良いのかも知れません。
80字を超える行について、ソートのときには一律80字として扱うのか、あるいは、元の文字数のままソートして出力だけ80字にするのか、はっきりしませんが、とりあえず前者だと解釈しました。
というわけで、新バージョンを晒します:

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>

template < typename Sequence >
class less_length : public std::binary_function< Sequence, Sequence, bool >
{
public:
    bool operator()( const Sequence& lhs, const Sequence& rhs ) const
    {
        return lhs.size() < rhs.size();
    }
};

int main()
{
    std::vector< std::string > data;
    for( std::string line; std::getline( std::cin, line ); data.push_back( line.substr( 0, 80 ) ) ){
        ;
    }
    std::stable_sort( data.begin(), data.end(), less_length< std::string >() );
    for( std::vector< std::string >::const_iterator it = data.begin(); it != data.end(); ++it ){
        if( !it->empty() ){
            std::cout << *it << std::endl;
        }
    }
}


恭子  2004-11-22 10:12:53  No: 55256

お二人とも解答ありがとうございます。
本当に助かりました。残りは自力でがんばってみます☆(^▽^)/


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加