我想将矩阵类的维度参数作为char数组传递,我可以通过计算参数中写入的逗号数来获取维数,但我似乎无法将char中的数字作为整数读取。
当我尝试从char转换为int时,我获得了巨大的无关数字。如何将char数组中的数字作为整数读取?
template <class T>
matrix <T>::matrix (char * dimensions)
{
int nod = 0;
for(int i=0;dimensions[i];i++)
{
if (dimensions[i] == ',') nod++;
}
Number_of_dimensions = nod+1;
//...
}
答案 0 :(得分:0)
您可以使用以下构思,使用粗略的伪代码片段进行说明:
std::string s = "1234,4556";
//While you still have a string to parse
while (s.length()) {
//Use a comma to delimit a token
std::string delimiter = ",";
//Find the position of the comma or the end of the string
unsigned int comma_pos = s.find(delimiter);
//Find the sub-string before the comma
std::string token = s.substr(0, comma_pos); // token is "1234"
//Find your int
int i = std::stoi(token);
//"Eat" the token, continue
s.erase(0, comma_pos+1);
}
这是一个特别粗略的例子,但核心思想是:使用std :: string :: substr()查找带逗号分隔符的子字符串,然后将令牌转换为int。
您也可以考虑寻找几个分隔符,例如'\ n'。
答案 1 :(得分:0)
Split()
函数按分隔符拆分字符串。在我们的例子中,分隔符是逗号。元素的数量是维度。我们使用std::stringstream
(C ++ 98或C ++ 11中的std :: stoi)将每个元素转换为数字。
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
std::vector<std::string> Split(const std::string &s, char delim)
{
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim))
elems.push_back(item);
return elems;
}
std::vector<int> GetDim(char *dimensions)
{
std::vector<std::string> dim_str = Split(dimensions, ',');
std::vector<int> elems(dim_str.size());
for (size_t i = 0; i < dim_str.size(); ++i) {
std::stringstream ss(dim_str[i]);
ss >> elems.at(i);
}
return elems;
}
int main() {
std::string s = "1234,4556";
std::vector<int> d = GetDim(&*s.begin());
std::cout << "Dimensions: " << d.size() << std::endl;
std::cout << "Values: ";
for (size_t i = 0; i < d.size(); ++i) {
std::cout << d[i] << " ";
}
std::cout << std::endl;
return 0;
}
我建议你不要使用指针作为参数。请改用std::string
或std::vector
。不要忘记const
限定符。所以GetDim()
可以是:
std::vector<int> GetDim(const std::string& dimensions)
{
std::vector<std::string> dim_str = Split(dimensions, ',');
std::vector<int> elems(dim_str.size());
for (size_t i = 0; i < dim_str.size(); ++i) {
std::stringstream ss(dim_str[i]);
ss >> elems.at(i);
}
return elems;
}