C/C++ 字符串基础函数

1、strtok    字符串分割

原型:

char   *strtok(char s[],  const char *delim);

解释:

分割字符串,s为传入的字符串,delim为分割符,返回值为分割出的子串的地址。

可以通过多次调用strtok,将字符串分解为一个个子串,只需第一次调用传入母串,后续调用只需要传入NULL即可。

strtok会破坏传入字符串的完整性,所以如果后续需要使用母串的话,需要先为母串拷贝一个副本。

示例:

	char* p = (char*)malloc(1024);
	memcpy(p, "aaa,bbb,ccc,ddd", 1024);
	char* p1 = strtok(p, ",");
	char* p2 = strtok(NULL, ",");
	char* p3 = strtok(NULL, ",");
	char* p4 = strtok(NULL, ",");
	cout << "p1:" << p1 << endl;
	cout << "p2:" << p2 << endl;
	cout << "p3:" << p3 << endl;
	cout << "p4:" << p4 << endl;

输出:

2、strtol   字符串转数字

 原型:

long int strtol(const char *nptr,char **endptr,int base);

解释:

将字符串转换为数字,nptr为母串,base为转换进制,返回转换后的数字和母串中首个未被识别的字符的地址(endptr)。

通过endptr可以判断转换结果,如果endptr = 0,说明字符串不可识别,转换失败。

如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE。

strtol的功能比itoa更为强大。

示例:

	char* srcPtr	= "0x10A,,1";
	char* endPtr    = NULL;
	int    num      = strtol(srcPtr, &endPtr, 16);
	cout << "number:" << num << endl;
	cout << "can not idetify:" << endPtr << endl;

输出:

猜你喜欢

转载自blog.csdn.net/rammuschow/article/details/82857283