當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ strtoll()用法及代碼示例


C++ 中的strtoll() 函數將字符串的內容解釋為指定基數的整數,並將其值返回為 long long int.

該函數還設置一個指針,指向字符串的最後一個有效字符之後的第一個字符(如果有),否則該指針設置為空。

For base 10 and the string "201xz$"

Valid numeric part -> 201
First character after valid numeric part -> x

strtoll() 原型 [從 C++ 11 標準開始]

long long int strtoll(const char* str, char** end, int base);

strtoll() 函數接受字符串、指向字符的指針和整數值 - 基數作為其參數,將字符串的內容解釋為給定基數的整數並返回一個 long long int 值。

該函數在<cstdlib> 頭文件中定義。

參數:

  • str:具有整數表示的字符串。
  • end:對已分配的 char* 類型對象的引用。 end 的值由函數設置為 str 中最後一個有效字符之後的下一個字符。該參數也可以是空指針,在這種情況下不使用。
  • base:整數值的基數。 base 的有效值集是 {0, 2, 3, ..., 35, 36}。

返回:

strtoll() 函數返回:

  • 一個 long long int 值(從字符串轉換而來)。
  • 如果無法執行有效轉換,則為 0。

示例 1:strtoll() 函數如何工作?

#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

int main()
{
	int base = 10;
	char numberString[] = "13.5ab_1x";
	char *end; 
	long long int number;
	
	number = strtoll(numberString, &end, base);
	cout << "String value = " << numberString << endl;
	cout << "Long long int value = " << number << endl;
	cout << "End String = " << end << endl;
	
	strcpy(numberString, "13");
	cout << "String value = " << numberString << endl;
	number = strtoll(numberString, &end, base);
	cout << "Long long int value = " << number << endl;
	if (*end) {
		cout << end;
	} else {
		cout << "Null pointer";
	}
	return 0;
}

運行程序時,輸出將是:

String value = 13.5ab_1x
Long long int value = 13
End String = .5ab_1x
String value = 13
Long long int value = 13
Null pointer

strtoll() 函數的有效整數值包括:

  • 可選的 + 或 - 符號。
  • 八進製基數的前綴 0(僅在基數 = 8 或 0 時適用)。
  • 十六進製基數的前綴 0x 或 0X(僅在基數 = 16 或 0 時適用)。
  • 一係列數字和/或字母(如果基數大於 10)。

參數 base 的有效值為 {0, 2, 3, ..., 35, 36}。以 2 為底的一組有效數字為 {0, 1},以 3 為底的一組有效數字為 {0, 1, 2},依此類推。

對於從 11 到 36 的堿基,有效數字包括字母。以 11 為底的有效數字集是 {0, 1, ..., 9, A, a},以 12 為底的有效數字是 {0, 1, ..., 9, A, a, B, b} 等等。

示例 2:strtoll() 具有不同基數的函數

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	char *end;
	
	cout << "23ajz" << " to Long Long Int with base-7 = " << strtoll("23ajz", &end, 7) << endl;
	cout << "End String = " << end << endl << endl;
	
	cout << "23ajz" << " to Long Long Int with base-20 = " << strtoll("23ajz", &end, 20) << endl;
	cout << "End String = " << end << endl << endl;
	
	cout << "23ajz" << " to Long Long Int with base-36 = " << strtoll("23ajz", &end, 36) << endl;
	cout << "End String = " << end << endl << endl;
	
	return 0;
}

運行程序時,輸出將是:

23ajz to Long Long Int with base-7 = 17
End String = ajz

23ajz to Long Long Int with base-20 = 17419
End String = z

23ajz to Long Long Int with base-36 = 3512879
End String =

strtoll() 函數會忽略所有前導空白字符,直到找到主要的非空白字符。

通常,strtoll() 函數的有效整數參數具有以下形式:

[whitespace] [- | +] [0 | 0x] [alphanumeric characters]

然後,從這個字符開始,它需要盡可能多的字符來形成一個有效的整數表示,並將它們轉換為一個 long long int 值。在最後一個有效字符之後字符串的剩餘部分將被忽略並且對結果沒有影響。

示例 3:strtoll() 函數用於前導空格和無效轉換

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	char *end;
	
	cout << "  25axbz" << " to Long Long Int with base-11 = " << strtoll("  25axbz", &end, 11) << endl;
	cout << "End String = " << end << endl << endl;
	
	cout << "   110bcd" << " to Long Long Int with base-2 = " << strtoll("   110bcd", &end, 2) << endl;
	cout << "End String = " << end << endl << endl;

	cout << "ax110.97" << " to Long Long Int with base-10 = " << strtoll("ax110.97", &end, 10) << endl;
	cout << "End String = " << end << endl << endl;

	return 0;
}

運行程序時,輸出將是:

  25axbz to Long Long Int with base-11 = 307
End String = xbz

   110bcd to Long Long Int with base-2 = 6
End String = bcd

ax110.97 to Long Long Int with base-10 = 0
End String = ax110.97

如果基數為 0,則通過查看字符串的格式自動確定數字基數。如果前綴為 0,則基數為八進製 (8)。如果前綴為 0x 或 0X,則基數為十六進製 (16),否則基數為十進製 (10)。

示例 4:strtoll() 以 0 為基數的函數

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	char *end;
	
	/* octal base */
	cout << "025x" << " to Long Long Int with base-0 = " << strtoll("025x", &end, 0) << endl;
	cout << "End String = " << end << endl << endl;
	
	/* hexadecimal base */
	cout << "0xf1x" << " to Long Long Int with base-0 = " << strtoll("0xf1x", &end, 0) << endl;
	cout << "End String = " << end << endl << endl;
	
	/* decimal base */
	cout << "15ab" << " to Long Long Int with base-0 = " << strtoll("15ab", &end, 0) << endl;
	cout << "End String = " << end << endl << endl;
	
	return 0;
}

運行程序時,輸出將是:

025x to Long Long Int with base-0 = 21
End String = x

0xf1x to Long Long Int with base-0 = 241
End String = x

15ab to Long Long Int with base-0 = 15
End String = ab

相關用法


注:本文由純淨天空篩選整理自 C++ strtoll()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。