C++による文字列の操作

string.cpp

#include <iostream>

auto main() -> int {
  std::string string("0123456789");
  std::cout << string.size() << std::endl; // -> 10
  std::cout << string[0] << std::endl; // -> 0
  std::cout << string.substr(1) << std::endl; // -> 123456789
  std::cout << string.substr(1, 5) << std::endl; // -> 12345
  std::cout << string.insert(1, "abcde") << std::endl; // -> 0abcde123456789
  std::cout << string.erase(10) << std::endl; // -> 0abcde123456
  std::string s1 = "11111";
  std::string s2 = "22222";
  auto s = s1 + s2;
  //string s = "11111" + "22222"; // -> error
  std::cout << s << std::endl; // -> 1111122222
  s += "33333";
  std::cout << s << std::endl; // -> 111112222233333
}


split.cpp

#include <iostream>
#include <sstream>
#include <vector>

auto split(const std::string& input, char delimiter = ',') -> std::vector<std::string> {
  std::stringstream stringstream(input);
  std::string token;
  std::vector<std::string> output;
  while (std::getline(stringstream, token, delimiter)) {
    output.push_back(token);
  }
  return output;
}

auto main() -> int {
  std::string string = "a1,a2,a3,a4,a5";
  for (std::string& s : split(string, ',')) {
    std::cout << s << std::endl;
  }
}


readCSV.cpp

#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>

auto readCSV(const std::string& file, std::vector<std::vector<std::string>>& table, char delimiter = ',') -> void {
  std::fstream fstream(file);
  while (!fstream.eof()) {
    std::string buffer;
    fstream >> buffer;
    std::stringstream stringstream(buffer);
    std::string token;
    std::vector<std::string> vector;
    while (getline(stringstream, token, delimiter)) {
      vector.push_back(token);
    }
    table.push_back(vector);
  }
}

auto main() -> int {
  std::string file = "sample.csv";
  std::vector<std::vector<std::string>> table;
  readCSV(file, table);
  for (int i = 0; i < table.size(); i++) {
    std::vector<std::string> record(table[i]);
    for (int j = 0; j < record.size(); j++) {
      std::cout << record[j] << ",";
    }
    std::cout << std::endl;
  }
}


参考サイト

1.C++での文字列の使い方まとめ
2.C++で文字列のsplit
3.getlineはsplitに使える
4.[C++]CSVファイルの読み込み

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中