string = std::vector<int>(6,0)
并希望它显示为{ 0 0 0 0 0 0 }
我试过这个
#include <iostream>
using namespace std;
int main()
{
string str = "std::vector<int>(6,0)" ;
unsigned found = str.find('(');
char c = str[found+1];
int i = c - '0';
char ch = str[found+3];
int j = ch - '0';
str = "{ ";
for(int k = 0; k < i ; k++)
{
str = str + ch + " " ;
}
str = str + " }";
cout << str << endl;
return 0;
}
它有效,但看起来效率不高。还有更好的主意吗?
答案 0 :(得分:0)
当前版本的代码仅适用于矢量大小和元素的单个数字值。使用std::stringstream
获得更好的解决方案:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string str = "std::vector<int>(6,0)" ;
unsigned found = str.find('(');
string arguments = str.substr(found);
// Replace non-numeric chars with spaces.
for (unsigned i=0;i<arguments.size(); ++i) {
if (!isdigit(arguments[i])) {
arguments[i] = ' ';
}
}
std::istringstream iss(arguments);
int size;
// String to avoid having to cast later on
string value;
iss >> size >> value;
string res = "{;
for (int i = 0; i < size; ++i) {
res += " " + value;
}
res += " }";
cout << res;
return 0;
}
答案 1 :(得分:0)
这是代码的另一个版本(希望)更灵活一点。它找到“(”唱,然后“)”,用逗号分隔它们,剥离所有空格字符并将数字转换为整数。然后它打印出来。
#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;
}