15.5 解析数字

优质
小牛编辑
133浏览
2023-12-01

下一个任务是把文件中的数字从字符串形式转换为整型数。在书写较大的数字时,人们往往会用逗号将数字分组,如1,750。而计算机处理数字时,绝大部分情况是不包括逗号的,而且内置的读取数字的函数通常不能处理逗号。这就增加了转换的困难,不过也给了我们一个机会来编写去掉逗号的函数,所以这也没什么。去掉逗号之后,我们就可以使用库函数atoi将字符串转换为整型数了。atoi在头文件stdlib.h中定义。

要去掉逗号,一个选择就是遍历字符串,检查每个字符是否是数字。如果是的话,我们就将其加入结果字符串中。在循环结束时,原始字符串中的所有数字就都按顺序包含到结果字符串中了。

int convertToInt (const apstring& s)
{
  apstring digitString = "";

  for (int i=0; i<s.length(); i++) {
    if (isdigit (s[i])) {
    digitString += s[i];
    }
  }
  return atoi (digitString.c_str());
}

变量digitString是累加器的一个例子。累加器和我们在第7.9节见过的计数器比较相似,不过计数器是不断地增加值,而累加器是每次以字符串连接的方式增加一个字符。

表达式

digitString += s[i];

等价于表达式

digitString = digitString + s[i];

两条语句都是在现有字符串末尾添加一个字符。

因为atoi以一个C字符串作为参数,所以我们必须先把digitString转化为C字符串,然后才能将其作为atoi的参数。