C++ String::stoull() 函数



C++ 的std::string::stoull() 函数用于将字符串转换为无符号长长整型。它分析字符串以提取数值并忽略任何空格。它还支持可选参数以指定转换的基数,例如十进制、十六进制或八进制。如果由于无效输入导致转换失败,则会抛出 invalid_argument 异常。

语法

以下是 std::string::stoull() 函数的语法。

unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const wstring& str, size_t* idx = 0, int base = 10);

参数

  • str - 表示包含整数表示形式的字符串对象。
  • idx - 表示指向 size_t 类型对象的指针,该函数将该指针的值设置为 str 中数值后下一个字符的位置。
  • base - 表示确定有效字符及其解释的数字基数。

返回值

它将字符串作为值返回到无符号长长整型。

示例 1

以下是用 C++ 使用 std::stoull() 函数将字符串转换为无符号长长整型的基本示例。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string number = "12345678901234567890";
   unsigned long long ull = stoull(number);
   cout << "The number = " << ull << endl;
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出。

The number = 12345678901234567890

示例 2

以下是一个指定数字基数的示例,用于将十六进制字符串转换为其以 16 为基数的十进制等效值。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string hexNumber = "1A2B3C4D5E6F";
   unsigned long long ull = stoull(hexNumber, nullptr, 16);
   cout << "The hexadecimal number " << hexNumber << " is " << ull << " in decimal." << endl;
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出。

The hexadecimal number 1A2B3C4D5E6F is 28772997619311 in decimal.

示例 3

在此程序中,我们从包含文本和数字的字符串中提取第一个数字,并演示如何使用 idx 参数查找已解析数字后字符的位置。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string mixedString = "42ABC!@";
   size_t idx = 0;
   while (idx < mixedString.size() && !isdigit(mixedString[idx])) {
      ++idx;
   }
   if (idx < mixedString.size()) {
      unsigned long long ull = stoull(mixedString.substr(idx), & idx, 10);
      cout << "Extracted number = " << ull << endl;

      idx += mixedString.find_first_of("0123456789");
      cout << "Next character in string after number = " << mixedString[idx] << endl;
   }
   return 0;
}

输出

以下是以上代码的输出。

Extracted number = 42
Next character in string after number = A         

示例 4

在此程序中,我们转换一个不表示数字的字符串,捕获并处理可能抛出的潜在异常。

#include <iostream>
#include <string>
using namespace std;
int main() {
   string number = "not a number";
   try {
      unsigned long long ull = stoull(number);
      cout << "The number is: " << ull << std::endl;
   } catch (const invalid_argument & ia) {
      cerr << "Invalid argument = " << ia.what() << endl;
   }
   return 0;
}

输出

以下是以上代码的输出。

Invalid argument: stoull          
string.htm
广告