我目前正在尝试从.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");
}
答案 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 = 6
和i = 7
在您的具体案例中。然后,获取yourArray[6]=0
和yourArray[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";
}
上