質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Boost

Boost (ブースト)は、C++の先駆的な開発者のコミュニティ、 またそのコミュニティによって公開されているオープンソースライブラリのことを指します。

Q&A

解決済

1回答

339閲覧

C++ 文字列を分割するテストプログラム

jon521

総合スコア12

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Boost

Boost (ブースト)は、C++の先駆的な開発者のコミュニティ、 またそのコミュニティによって公開されているオープンソースライブラリのことを指します。

0グッド

1クリップ

投稿2018/01/15 15:29

Visual StudioでBoostを使用し、"1+1" などの文字列を分割できるかどうかをテストするプログラムを作成しています。
足し算をテストすることはできたのですが、引き算もテストできるようにしたいです。
どのようにしたらいいでしょうか?よろしくお願いします。

C++

1namespace symbol { 2 enum { 3 plus = -1, 4 minus = -2, 5 }; 6} 7 8bool parse(const std::string& src, std::vector<int>& dest) { 9 try { 10 std::string buffer; 11 for (size_t i = 0; i < src.length(); ++i) { 12 if (src[i] == '+') { 13 int value = std::atoi(buffer.c_str()); 14 dest.push_back(value); 15 buffer.clear(); 16 dest.push_back(symbol::plus); 17 } 18 else buffer += src[i]; 19 } 20 21 if (!buffer.empty()) dest.push_back(std::atoi(buffer.c_str())); 22 return true; 23 } 24 catch (std::exception& /* err */) { return false; } 25} 26 27 28void test_plus() { 29 std::vector<int> result; 30 31 BOOST_REQUIRE(parse("1+1", result)); 32 BOOST_REQUIRE(result.size() == 3); 33 BOOST_CHECK(result[0] == 1); 34 BOOST_CHECK(result[1] == symbol::plus); 35 BOOST_CHECK(result[2] == 1); 36} 37 38int test_main(int argc, char* argv[]) { 39 test_plus(); 40 return 0; 41} 42

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

テストするだけなら下記と思います。

C++

1void test_minas() { 2 std::vector<int> result; 3 4 BOOST_REQUIRE(parse("1-1", result)); 5 BOOST_REQUIRE(result.size() == 3); 6 BOOST_CHECK(result[0] == 1); 7 BOOST_CHECK(result[1] == symbol::minas); 8 BOOST_CHECK(result[2] == 1); 9}

もちろんparse()を引き算に対応する必要はあります。
ここまで作られたのであれば、直ぐ出来ると思いますので割愛します。

投稿2018/01/15 16:07

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jon521

2018/01/15 16:28

ご回答ありがとうございます。parse()を引き算に対応させようとしているのですがどうしてもできません。教えていただけないでしょうか?
Chironian

2018/01/15 16:46

元のプログラムが正しいなら、下記を追加するくらいです。至極簡単ですので頑張ってください。 else if (src[i] == '-') {   中身は`+`の時とほぼ同じ。 }
jon521

2018/01/15 17:02

引き算をテストするようにできました。 ご丁寧な回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問