如何将字符串的一部分(具有除数字之外的字符)解析为整数

时间:2015-04-14 01:10:20

标签: c++ delimiter ifstream

我目前正在尝试从.txt文件中读取信息,并基本上正确地存储它。输入文件中的数据看起来像这样

10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10
765DEF 01:01:05:59 enter 17
ABC123 01:01:06:01 enter 17
765DEF 01:01:07:00 exit 95
ABC123 01:01:08:03 exit 95

我的问题是,假设我已将“01:01:05:59”读入字符串,我如何解析它以将数字存储在int变量中。另外,我真正需要的是该字符串中的第三对数字(从左侧开始),我也想知道如何跳过该字符串中的前两个和最后一对数字。我读过分隔符,但我对如何使用它们感到有些困惑。到目前为止我所拥有的代码如下所示,基本上就是字符串的信息。

#include<iostream>
#include<fstream>
#include<string>
using namespace std;



int main()
{
    int arr[25];


    ifstream File;
    File.open("input.txt");

    for (int a = 0; a < 25; a++)
    {
        File >> arr[a];

    }
    for (int i = 0; i < 25; i++)
    { 
        cout << arr[i] << " ";
    }

    cout << endl;

    string license, datetime;
    File >> license >> datetime; // reads in license plate and datetime information into two separte strings
    cout << license << endl << datetime;


    system("pause");
} 

3 个答案:

答案 0 :(得分:3)

<强>背景 如果我们知道我们需要的子字符串的开始和结束索引(或长度),那么我们可以使用std::string::substr来读取它。

其用法如下:

#include <string>

...

std::string foo = "0123456789stack:overflow";

// start index = 4, length = 2
std::string subStr1 = foo.substr(4,2); // result = "45"

// start index = 3, end index = 5 => length = 5 - 3 + 1 = 3
std::string subStr2 = foo.substr(3,3); // result = "345"
// The first parameter is the start index whereas the second one is 
// the length of the wanted sub-string. 

// If only the start index is known:
std::string subStr2 = foo.substr(9); //  result = "9stack:overflow"
// In that case we get the rest of the string starting from the start index 9.

有关详情,请参阅:http://www.cplusplus.com/reference/string/string/substr/

建议的OP解决方案: 既然你说'我真正需要的就是第三对数字&#34;那么你需要从索引6开始的两个字符:

std::string a  = "01:01:05:59";

std::string sub = a.substr(6, 2); // will give you "05"

然后使用:

转换它们
int number = std::stoi(sub);

这些步骤可以缩短为:

int number = std::stoi( a.substr(6, 2) );

进一步参考:

第一部分:http://en.cppreference.com/w/cpp/string/basic_string/substr

第二部分:How to parse a string to an int in C++?

PS:如果你想使用字符array而不是std::string,那么你就可以获得带有相应索引的字符。例如:i = 6i = 7在您的具体案例中。然后,获取yourArray[6]=0yourArray[7]=5。然后对它们执行整数转换。

答案 1 :(得分:1)

你能做到: int num = std::stoi(string.substr(6, 2);

答案 2 :(得分:1)

  

假设我已将"01:01:05:59"读入字符串

一种简单的方法是使用流:

#include <iostream>
#include <sstream>

int main()
{
    int n[4];
    std::istringstream iss("02:30:41:28");
    if (iss >> n[0] && iss.get() == ':' &&
        iss >> n[1] && iss.get() == ':' &&
        iss >> n[2] && iss.get() == ':' &&
        iss >> n[3] >> std::ws && iss.eof())
        std::cout << n[0] << ' ' << n[1] << ' ' << n[2] << ' ' << n[3] << '\n';
    else
        std::cerr << "parsing error\n";
}

ideone.com