将整数字符串转换为整数的最简单方法
Easiest way to convert string-of-integers to int
我有一个很长的数字,有数百个数字,我把它存储在一个字符串中。现在,我想逐个数字将其读成整数/长整型。
long int strtol ( const char * str, char ** endptr, int base );
需要一个端点,但似乎我无法正确设置它,因为它尝试读取所有数字,因此返回LONG_MAX
.
char str[]=
"70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586";
char *pEnd; //set pEnd to str[1]'s address how???
long num = strtol(str, &pEnd, 10);
cout << num << endl; //LONG_MAX
我想到了解决方案,例如将其复制到新的字符数组,然后应用strtol
但这似乎不是最好的方法。
那么最简单/最好的方法是什么呢?
如果你想读一个数字,你可以简单地使用:
int digit = str[digitIndex] - '0';
无论实现使用何种字符集,这都有效,因为标准保证数字"0"-"9"将由连续值表示。
strtol
的 endptr
参数不会像您想象的那样:它用于返回转换停止的位置,而不是告诉函数在哪里停止。
如果要转换 str
的多位数子字符串,则只能将所需的数字复制到新字符串中,如下所示:
std::string partialStr(str+startIndex, numDigits);
然后使用此处的方法之一将其转换为整数。
将
一位数字转换为其整数表示很容易,例如
int i = str[0] - '0';
对于第一个数字。因此,您只需要创建一个整数数组,遍历字符串并转换每个数字,将结果存储在整数数组中。
结束指针是该 strtol 的输出。它告诉你它在哪里停止阅读,而不是相反。
如果您想读取单个数字,则只需执行以下操作:
digit = str[0] - '0';
如果基数为 10,并且字符串 Length LENGTH
,则执行:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
/*Prototype*/
long int intpow( int base, int exp);
int main(void)
{
long int result = 0;
int i, j = 0;
char str[] = /* blah blah*/
for( i = LENGHT - 1; i >= 0; i--){
/* -48 because ASCII code. */
result += ( str[ i ] - 48 ) * intpow( 10, j );
j++;
}
}
/* Recursive integer power function*/
long int intpow( int base, int exp)
{
if( exp == 0)
return 1;
else
return base * intpow( base, exp - 1);
}
如果您不仅要转换其中一个数字,还要转换所有数字,请使用 std::transform:
size_t N = sizeof(str) -1 ; //or strlen(str) if str is a pointer, not an array
std::vector<int> theInts(N);
std::transform(str, str+N, begin(theInts), [](char* pc){ return *pc -'0'; });
相关文章:
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 请求最简单的 OpenMP 目标 GPU 示例
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++20 个模块在 clang (Windows):在最简单的示例中键入信息错误
- 对多个(可能)重叠范围进行分区的最简单算法
- 在 cpp 中最简单的图形实现
- boost::variant - 对变体应用算术的最简单方法
- 多线程 gtkmm 应用程序最简单的示例
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 在C++中将算术类型转换为 std::array 的最简单方法<uint8_t>
- 标准库容器最简单、性能差的哈希类是什么?
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 无法获得最简单的JNI足以在Windows 10上运行
- 我无法显示包含整数最大值的索引. 但我可以显示数组中整数的最高值
- 将整数字符串转换为整数的最简单方法
- 在C++11中实现共享整数计数器而不使用互斥的最简单方法:
- C++11 在map<key,value>中存储值(整数和字符串)的多种数据类型的最简单方法?