여기 (희망) 좀 더 유연 코드의 또 다른 버전입니다. "("sing, then ")"을 찾아서 쉼표로 구분하고 모든 공백 문자를 제거하고 숫자를 정수로 변환합니다. 그런 다음 인쇄합니다.
#include <string>
#include <iostream>
using namespace std;
//these three functions are taken from here:
//http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
#include <algorithm>
#include <functional>
#include <cctype>
#include <locale>
static inline std::string <rim(std::string &s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
return s;
}
// trim from end
static inline std::string &rtrim(std::string &s) {
s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
return s;
}
// trim from both ends
static inline std::string &trim(std::string &s) {
return ltrim(rtrim(s));
}
int main()
{
string s = "std::vector<int>(612,30)";
int paren_start = s.find("(")+1;
string numbers = s.substr(paren_start, s.find(")")-paren_start);
int comma_pos = numbers.find(",");
string first_num = numbers.substr(0, comma_pos);
string second_num = numbers.substr(comma_pos+1, numbers.size()-comma_pos);
int first = atoi(trim(first_num).c_str());
int second = atoi(trim(second_num).c_str());
cout << "{" << endl;
for(int i=0; i<first; i++)
{
cout << second << " ";
}
cout << "}" << endl;
return 0;
}
그것은 잔인한 사람이 될 수 있지만, 나는 [꽤 프린터 (http://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers)를 처리 할 수 있습니다 확신합니다. – chris
효율적이지만 유연하지 않습니다. – deepmax
당신은 std :: regex 또는 boost :: spirit을 사용하여 이러한 컨텐트를 더 유연하게 분석 할 수 있습니다. Regex는 결코 –