将字符串转换为整数?

时间:2014-08-31 22:17:05

标签: c++ visual-c++

这是一个项目,这只是我整个计划的一部分。

我收到的信息格式为:

  

200707211245 F70.5

空格前的数字是YYYYMMDDTTTT T=time,我必须以下列格式输出到新文件:

  

21.38 C ---于2007年7月21日12:45录制

这是一个相当简单的过程,但我无法弄清楚如何将前7个数字更改为一个整数,我可以传递给一个函数来正确格式化日期和时间。我正在使用Visual Studio 2013。

随后这就是我所能做到的。任何和所有的帮助将不胜感激。我在代码的.c_str()部分收到错误。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
  ifstream inFile;
  inFile.open("inputData.txt", ios::in);

  ofstream oFile;
  oFile.open("results.dat", ios::out);

  int date = atoi(inFile.c_str());

  return 0;
}

int getDate(int date)
{
}

2 个答案:

答案 0 :(得分:0)

首先注意一些事项:

  • atoi返回int值,您的号码200707211245有12位数(int范围为–2,147,483,648 to 2,147,483,647 最多十位数 ),你的号码不适合类型范围,你会得到奇怪的结果。
  • 最好使用boost
  • 中的lexical_cast

以下是一个例子:

#include <iostream>
#include <fstream>
#include <boost/lexical_cast.hpp>

using namespace std;

int get_date(long long date) {
    std::cout << date << std::endl;
    return date;
}

int main()
{
    ifstream in_file("H:\\save.txt", ios::in);
    if (!in_file.is_open())
        return -1;

    std::string date_str;
    in_file >> date_str;

    int date1 = atoi(date_str.c_str()); // would overflow
    long long date2 = boost::lexical_cast<long long>(date_str);

    get_date(date2);

    return 0;
}

预期产出:

200707211245

答案 1 :(得分:0)

解决此问题的最简单方法是将字符串输入解析为Y,M,D,H,M和temp的单独字符串。读取一行输入并将其分成几部分。你可能不想在课堂上使用Boost。只需在标准库中使用std :: string和字符串操作。

然后你可以将这些小字符串转换成小整数,或者只是将它们盲目地重新格式化为输出。

温度字符串必须转换为double才能转换为摄氏度。