当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。