0

我正在解析用户的坐标,我想将它们添加到一个向量中(不知道有多少会被吸收)。但是,插入了错误的值。如图所示:

string userInput;
getline(cin,userInput);

for(int i = 0; i < userInput.length(); i++)
{
    if(isdigit(userInput[i]))
    {
        results.push_back(userInput[i]);
        if(isdigit(userInput[i + 1])) //check the value next to it too (max of double digits)
        {
            results[i] = 10 * (userInput[i + 1]); //add it to the vale
        }
    }
}

如果我输入 (1,2) - (3,4),则会跳过 '(',但由于某种原因,当它看到 1 是一个数字时,它会将 49 以及其他随机数放入向量中。任何帮助将不胜感激,谢谢!

4

1 回答 1

1

userInput[i]char类型。它不是随机的,而是以 ASCII 编码的。ASCII 中的 '0'...'9' 以十进制 48-57 编码。所以你可以使用userInput[i] - 48oruserInput[i] - '0'来获取你的int。

代码中的另一个问题:在每次迭代中,您检查它旁边的值,但在下一次迭代中不跳过它,这意味着如果输入是1234,您将得到一个向量{12,23,34}

还有一个问题:您的代码永远无法捕获 3 位数字。

最后(希望),你results[i] = 10 * (userInput[i + 1])的第一个数字掉了。

顺便说一句,为什么不使用stringstream来解析您的输入?以下函数将解析一个坐标。

#include <sstream>

std::pair<int,int> parse_coordinate (const string& input_string) {
  std::pair<int,int> ret;
  std::stringstream in(input_string);
  if ( (in.get() == '(') && (in >> ret.first)
    && (in.get() == ',') && (in >> ret.second)
    && (in.get() == ')') ) {
    return ret;
  }
  // deal with error
  return std::make_pair(0,0);
}
于 2013-05-30T11:57:57.320 回答