将字符串的一部分读取到整数数组
Read part of string to integer array
我正在编写一个C++程序来操作文本文件。任务的一部分涉及在文本文件中搜索特定的"搜索字符串",并将其的一部分存储为整数数组。
我写了以下代码:
ifstream myoutfile;
myoutfile.open (outputfile.c_str()); // filename is passed as a user input
string search="SEARCH STRING" // search string
while (getline(myoutfile, line))
{
if (line.find(search) != string::npos)
{
cout << line[54] << line[55] << line[56] << endl;
}
}
问题是我想将行的第 54 个第 55 个和第 56 个字符作为单个整数读取到数组中。(假设第 54 个字符是"1",第 55 个字符是"2",第 56 个字符是"6"。我想将其作为数字 126 读入数组。是否可以在此循环中执行此操作,或者我必须将其保存到文件中,并编写一个单独的部分以将文件的内容读取到数组中。我想知道是否有人可以提供帮助。
您可以使用 std::stringstream 和 std::string::substr 来获取子字符串并转换为 int。也可以使用 std::atoi
#include <sstream>
int i = 0;
std::istringstream ss(line.substr(54, 3));
ss >> i;
或
#include <cstdlib>
int b = std::atoi(line.substr(54, 3).c_str());
如果只是 54 到 56 个字符,你可以这样做:
int x = (line[54] - '0') * 100 +(line[55] - '0') * 10 +(line[56] - '0') ;
line[54] - '0'
部分将字符符号转换为数字。
这里的通常解决方案是 std::istringstream
,但它确实如此需要比其他海报似乎暗示的更多的工作:
std::istringstream parser( line.substr( 54, 3 ) );
parser >> i;
if ( !parser || parser.get() != EOF ) {
// Error.
} else {
// No error, you can use i...
}
如果你有C++11,你可以使用std::stoi
,但乍一看,它似乎更复杂:
size_t end = 0;
try {
i = std::stoi( line.substr( 54, 3 ), &end );
} catch ( std::runtime_error const& ) {
// No numeric characters present...
// end remains 0...
}
if ( end != 3 ) {
// Error, either string wasn't long enough, or
// contained some non-numeric.
} else {
// No error, you can use i...
}
另一方面,通过捕捉std::invalide_argument
和 std::out_of_range
单独,您可以区分错误。
或者,当然,您可以直接使用strtol
:
char tmp1[4] = {};
line.copy( tmp1, 3, 54 );
char* end;
errno = 0;
long tmp2 = strtol( tmp1, &end, 10 );
if ( errno != 0 || end != tmp1 + 3 || tmp2 > INT_MAX || tmp2 < INT_MIN ) {
// Error...
} else {
i = tmp2;
// No error, you can use i...
}
考虑到所有因素,我想我更喜欢第一种方法(但是最后一个可能会快得多)。
相关文章:
- 从二进制文件中读取整数数组
- 新的整数数组向右移动?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 从两个 4x64 位整数数组中获取取模
- 字符到整数数组
- 从函数参数 [C++] 复制整数数组
- 指向整数数组和打印总和的指针
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 线程安全整数数组?
- 整数数组中最长的回文
- 在大整数数组中查找子数组
- 查找整数数组中最接近的数字
- 创建<int>对整数数组指针的矢量引用 (C++)
- 整数指针数组的元素是否可以指向整数数组?
- 如何将整数数组相乘得到一个数字?
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 将文本文件读入整数数组