如何将字符串的一部分(包含数字以外的字符)解析为整数

How to parse a part of a string, which have characters other than digits, to integer

我目前正在尝试从 .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");
} 

背景: 如果我们知道我们需要的子字符串的开始和结束索引(或长度),那么我们可以使用 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 的建议解决方案: 既然你说 "all I really need is the third pair of numbers" 那么你需要从索引 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。然后对它们进行整数转换。

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

assuming I have read "01:01:05:59" into a string

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

#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