尝试将字符串char转换为int时出错

时间:2014-12-23 03:41:20

标签: c++ atoi c-str

我有一个简单的程序,我想将输入存储到矩阵中以便于访问。我在将一个简单的字符串转换为int时遇到问题,有人可以解释为什么我的代码在我尝试编译时会给我这条消息吗?

acm.cpp:20:42: error: request for member ‘c_str’ in ‘temp.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(((std::basic_string<char>::size_type)j))’, which is of non-class type ‘char’

问题似乎在于我使用了c_str()函数,但如果我没有弄错,那么将字符转换为int值是必要的。

我的代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
   // read input from console
  int N, M;
  cin >> N; // number of people
  cin >> M; // max number of topics

  // read in binary numbers into matrix
  int binaryNumbers[N][M];
  for (int i = 0; i < N; i++) {
    string temp;
    cin >> temp;
    for (int j = 0; j < M; j++) {
      binaryNumbers[i][j] = atoi(temp[j].c_str());
      cout << binaryNumbers[i][j] << endl;
    }
  }

  return 0;
}

1 个答案:

答案 0 :(得分:0)

使用:

binaryNumbers[i][j] = temp[j] - '0';

您不需要将atoi用于单个数字,其数值只是与'0'的偏移量。

但如果您真的想使用atoi,则必须创建一个单独的字符串:

for (int j = 0; j < M; j++) {
    char digit[2] = "0";
    digit[0] = temp[j];
    binaryNumbers[i][j] = atoi(digit);
    cout << binaryNumbers[i][j] << endl;
}