如何将char数组中的数字作为整数读取?

时间:2015-04-12 10:07:55

标签: c++

我想将矩阵类的维度参数作为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;
  //...
}

2 个答案:

答案 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::stringstd::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;
}