使用分隔符C++将字符串解析为整数
Parse string into integers using delimiter C++
我正在尝试进行调用率计算,其中输入将按如下方式完成:hh:mm
在此之后,我想将该字符串解析为两个整数,只有":"作为分隔符。我在这里得到的这个解决方案似乎仅适用于空格,但我希望分隔符是冒号,而不是空格。有没有可能的方法可以做到这一点?
#include <iomanip>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string input;
getline(cin, input);
istringstream is(input);
int hours, minutes;
is >> hours>> minutes;
cout << timmar << endl;
cout << minuter << endl;
}
将分隔符字符读入另一个变量。
char colon;
is >> hours >> colon >> minutes;
if (colon != ':') {
cout << "Incorrect delimiter: " << colon << 'n';
}
与其期望使用默认的分隔符,不如使用自定义操纵器来专门处理分隔符:
std::istream& colon(std::istream& in) {
if (in.peek() != ':' || std::isspace(in.ignore().peek())) {
in.setstate(std::ios_base::failbit);
}
return in;
}
// ...
int hours, minutes;
if (in >> hours >> colon >> minutes) {
// process the input
}
使用此操纵器可避免冒号附近的空格被视为有效:正常的输入操作从跳过空格开始。简单地将分隔符读取到变量中将允许分隔符前面有空格,并且还允许任何非空格字符作为分隔符。直接在分隔符之后继续读取将再次允许在分隔符之后留出空格。使用上面的colon
操纵器会使这两种情况都变成错误。...当然,您始终需要在阅读后和使用结果之前检查输入是否成功。
解决同一问题的完全不同的方法是重新定义流的空格表示法。这里的想法是利用流的std::locale
并imbue()
一个将所需的分隔符(例如:
)视为唯一"空格"的std::locale
。下面是一个完整的示例,演示了这个想法。它使用带有自定义std::locale
的单独std::istream
,以避免更改std::cin
的工作方式。但是,它仍然使用std::cin
流缓冲区,即它从与std::cin
相同的源读取。
#include <algorithm>
#include <locale>
struct myctype_base {
std::ctype<char>::mask table[std::ctype<char>::table_size];
myctype_base(unsigned char c) {
table[c] |= std::ctype_base::space;
}
};
struct myctype
: private myctype_base
, std::ctype<char> {
public:
myctype(char delimiter)
: myctype_base(delimiter)
, std::ctype<char>(myctype_base::table) {
}
};
int main() {
std::locale loc(std::locale(), new myctype(':'));
std::istream in(std::cin.rdbuf());
in.imbue(loc);
int hours, minutes;
if (in >> hours >> minutes) {
std::cout << "read hours=" << hours << " minutes=" << minutes << "n";
}
else {
std::cout << "failed to read inputn";
}
}
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 尝试将字符串/字符转换为整数会产生意外结果
- 从字符串中提取整数并形成一个数组
- 如何将整数字符串转换为整数的二维向量?
- 如何初始化整数+字符串数组
- 将字节数组转换为逗号分隔的整数字符串
- 编写 LLVM 整数/字符串输入
- 使用户输入整数字符串,然后输出不同的字符串
- 如何在 python 中将无符号字符类型的整数字符串转换为整数
- 将整数字符串转换为整数的最简单方法
- 如何检查输入是否为整数/字符串
- 如何将二进制字符串转换为整数字符串
- 将二进制字符串转换为整数字符串c++
- 如何在c++中将一个整数字符串转换为数组
- 整数字符串压缩算法
- 当 0 是行中的最后一个整数时,如何使用 c++ 检测您已经到达整数字符串的末尾?
- 将整数字符串解析为 std 向量
- 用空格分割一个正/负整数字符串
- 我如何在c++中排序一个整数字符串
- 添加整数字符串