C言語関係掲示板

過去ログ

No.494.コードと一致する内容を表示(C++)

[戻る] [ホームページ]
No.3651

助けてください!!
投稿者---おがっぺ(2002/11/29 16:29:13)


プログラミングC++の課題で次のようなものが出題されました。本当にわからなくて困っています。もし時間がある方がいましたら、どうか教えてください。お願いします!!

課題:以下のコード表をもとに、キーボードからコードを入力したらコードの内容を表示するようなプログラムを作れ。
   01 北海道  04 関東
   02 東北   05 中部
   03 中国   06 近畿

No.3654

Re:助けてください!!
投稿者---たか(2002/11/29 17:06:56)


STLを使いました。

#include <iostream>
#include <map>
#include <string>

int main()
{
  std::map<std::string, std::string> pssm;
  std::string str;
  
  pssm["01"] = "北海道";
  pssm["02"] = "東北";
  pssm["03"] = "中国";
  pssm["04"] = "関東";
  pssm["05"] = "中部";
  pssm["06"] = "近畿";
  
  while (true) {
    std::cout << "コード(0 = end) > ";
    std::cin >> str;
    if (str == "0") break;
    std::cout << pssm[str] << std::endl;
  }
}


No.3666

ありがとうございます!!
投稿者---おがっぺ(2002/11/30 18:57:05)


たかさん、教えてくれてありがとうございました!!あと、classを使ったやり方なんかもありますか?もしあれば、できたらでいいのでまた教えてください。ひとつ答えてもらったのに、わがまま言ってすみません(>_<)

No.3667

Re:ありがとうございます!!
投稿者---たか(2002/11/30 19:44:06)


この程度の問題なら、無理にclassを使う必要もないと思いますが、
例えば配列演算子をオーバーロードするクラスを使ったら次のような
感じになるでしょう。

#include <iostream>
#include <string>
#include <vector>

typedef std::pair<std::string, std::string> Ss;

class Assoc {
  std::vector<Ss> sv;
public:
  Assoc() {
    sv.push_back(std::make_pair("01", "北海道"));
    sv.push_back(std::make_pair("02", "東北"));
    sv.push_back(std::make_pair("03", "中国"));
    sv.push_back(std::make_pair("04", "関東"));
    sv.push_back(std::make_pair("05", "中部"));
    sv.push_back(std::make_pair("06", "近畿"));
  }
  std::string operator[](std::string& str) {
    for (int i = 0; i < 6; i++)
      if (sv[i].first == str)
        return sv[i].second;
    return std::string();
  }
};

int main()
{
  Assoc as;
  std::string str;
  
  while (true) {
    std::cout << "コード(0 = end) > ";
    std::cin >> str;
    if (str == "0") break;
    std::cout << as[str] << std::endl;
  }
}


No.3675

またまたありがとうございました☆
投稿者---おがっぺ(2002/12/01 22:44:14)


あんなに長いclassのプログラムをわざわざ作っていただいて、ありがとうございます!助かりました♪また何かあった時も助けていただけたら嬉しいです。本当にありがとうございました!!