将字符串转换为整数

Converting a string to an integer?

本文关键字:整数 转换 字符串      更新时间:2023-10-16

这是针对一个项目的,这只是我挂断的整个程序的一部分。

我收到了一个文件,其中的信息格式是:

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)
{
}

前几个注意事项:

  • atoi返回值和int值,您的数字200707211245有12位数字(int范围为–2,147,483,648 to 2,147,483,647最大10位),如果您的数字不符合类型范围,您将获得奇怪的结果
  • 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

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

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

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