掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29437

プログラムの解説をお願いします
投稿者---ミント(2007/01/15 18:14:07)


#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cctype>
#include <map>

using namespace std;

typedef pair<string, int> counter;
bool cmp (const counter &s1, const counter &s2) {
  return s1.first.size() > s2.first.size();
}
int main() {
  string buffer;
  map<string, int> dic;
  int c;
  for (c = cin.get(); cin.good(); c = cin.get()) {
    if (isalpha(c)) {
      string buffer;
      buffer.push_back((char)c);
      for (c = cin.get(); cin.good() && isalnum(c); c = cin.get())
        buffer.push_back((char)c);
      cin.putback(c);
      dic[buffer]++;
    }
  }
  vector<counter> v(dic.begin(), dic.end());
  sort(v.begin(), v.end(), cmp);
  for (vector<counter>::iterator i = v.begin(); i != v.end(); ++i)
    cout << i->first << ":" << i->second << endl;
  return 0;
}


このプログラムのvとdicの働きがわからないのでどなたか教えてください。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:プログラムの解説をお願いします 29438 あしっどまん 2007/01/15 18:16:16
<子記事> Re:プログラムの解説をお願いします 29443 επιστημη 2007/01/15 22:45:02


No.29438

Re:プログラムの解説をお願いします
投稿者---あしっどまん(2007/01/15 18:16:16)


まず何のプログラム書いてください。
ついでにこれはCじゃなくてC++のプログラムだね。


この投稿にコメントする

削除パスワード

No.29439

Re:プログラムの解説をお願いします
投稿者---ミント(2007/01/15 18:27:44)


はい。これはファイルを読み込んで英字のみか、先頭が英字で二文字目以降が英字または数字である文字列を取り出し、その文字列の長さが長い順に並べてその文字列の頻度と共に表示するプログラムです。


この投稿にコメントする

削除パスワード

No.29440

Re:プログラムの解説をお願いします
投稿者---RAPT(2007/01/15 21:53:45)


STL の map と vector の働きについては分かりますか?
分からなければ、まずこれらコンテナについて調べてください。


この投稿にコメントする

削除パスワード

No.29441

Re:プログラムの解説をお願いします
投稿者---ミント(2007/01/15 22:02:09)


それは調べたのでわかります


この投稿にコメントする

削除パスワード

No.29442

Re:プログラムの解説をお願いします
投稿者---RAPT(2007/01/15 22:42:47)


> それは調べたのでわかります
じゃ、何が分からないのかが分からない。

> このプログラムのvとdicの働きがわからない
v → vector
dic → map

標準入力から buffer に単語を入れる
単語ごとに出現回数を dic に記憶する
std::map を std::vector にアサインして
比較関数 cmp でもって v をソートし
標準出力に出力する。



この投稿にコメントする

削除パスワード

No.29444

Re:プログラムの解説をお願いします
投稿者---ミント(2007/01/15 23:14:36)


>v → vector
>dic → map
のことがわからなかったのでありがとうございます。



この投稿にコメントする

削除パスワード

No.29452

Re:プログラムの解説をお願いします
投稿者---RAPT(2007/01/16 11:17:21)


> > v → vector
> > dic → map
> のことがわからなかったのでありがとうございます。

自分で変数宣言しているのに分からないとはこれ如何に。
> map<string, int> dic;
> vector<counter> v(dic.begin(), dic.end());



この投稿にコメントする

削除パスワード

No.29443

Re:プログラムの解説をお願いします
投稿者---επιστημη(2007/01/15 22:45:02)
http://blogs.wankuma.com/episteme/


>このプログラムのvとdicの働きがわからないのでどなたか教えてください。

dic : 文字列 をkey, その頻度 をvalue とする辞書
v : その辞書に登録された (key,value) の組を文字列長でソートするためのベクタ



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧