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
廣告