isdigit、isalnum、isalpha、islower、issupper都是C/C ++语言中判断字符的一些函数,灵活利用在刷题中可以节省我们的一部分时间。下面c统一为char类型字符
1.isdigit
若参数c为十进制数字0~9,则返回非0值,否则返回0。
其中isxdigital判断是否是十六进制数
2.isalnum
用来判断一个字符是否为数字或者字母,如果是,则返回非零,否则返回零。
3. isalpha
用来判断一个字符是否为字母,如果是,则返回非零,否则返回零。
4. islower
用来判断一个字符是否为小写字母,如果是,则返回非零,否则返回零。
tolower转换成小写
5. islsupper
用来判断一个字符是否为大写字母,如果是,则返回非零,否则返回零。
toupper转换成大写
二、stoi, stoll用法
一、stoi将字符串转换为int类型整数
头文件string
int stoi (const string& str, size_t* idx = 0, int base = 10);
解析str将其内容解释为指定基数的整数,并以int值的形式返回。
如果idx不是空指针,则该函数还将idx的值设置为数字后str中第一个字符的位置。
base:进制,10:十进制,8:八进制,16:十六进制,0:则自动检测数值进制,str 是 0 开头为八进制,str 是 0x 或 0X 开头是十六进制,默认为十进制
stoi() 函数指定转换字符串为十进制用法
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int a;
size_t pos = 0;
string str;
str = "-1235";
a = stoi(str);
cout << "a = " << a << endl; //a = -1235
str = "1235";
a = stoi(str);
cout << "a = " << a << endl; //a = 1235
str = " -12 35"; // 前两个空格
a = stoi(str, &pos); // 会舍弃空白符
cout << "a = " << a << endl; //a = -12
cout << "pos = " << pos << endl; //pos = 5
str = " -12ab35";// 前两个空格
a = stoi(str, &pos);// 会舍弃空白符
cout << "a = " << a << endl; //a = -12
cout << "pos = " << pos << endl; //pos = 5
str = "0123";
a = stoi(str);
cout << "a = " << a << endl; //a = 123
str = "0x123";
a = stoi(str);
cout << "a = " << a << endl; //a = 0
return 0;
}
stoi() 函数将指定转换字符串以16进制转10进制用法
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int a;
size_t pos = 0;
string str;
str = "0x123";
a = stoi(str, NULL, 16); //base = 16,指定十六进制
cout << "a = " << a << endl; //a = 291
str = "0x123";
a = stoi(str, NULL, 0); //base = 0,自动检测数值进制
cout << "a = " << a << endl; //a = 291
str = "-12";
a = stoi(str, &pos, 16); //-(2 + 1*16)
cout << "a = " << a << endl; //a = -18
cout << "pos = " << pos << endl; //pos = 3
str = "12";
a = stoi(str, &pos, 16); //2 + 1*16
cout << "a = " << a << endl; //a = 18
cout << "pos = " << pos << endl; //pos = 2
str = " -12 35";
a = stoi(str, &pos, 16); //会舍弃空白符
cout << "a = " << a << endl; //a = -18
cout << "pos = " << pos << endl; //pos = 5
str = " -ab";
a = stoi(str, &pos, 16); //-(11 + 10*16)
cout << "a = " << a << endl; //a = -171
cout << "pos = " << pos << endl; //pos = 5
str = "0123";
a = stoi(str, NULL, 16); //(3 + 2*16 + 1*16*16)
cout << "a = " << a << endl; //a = 291
return 0;
}
异常
如果无法执行转换,则抛出invalid_argument异常。
如果读取的值超出int的可表示值范围,则抛出out_of_range异常。
无效的idx会导致未定义的行为。
2.stoll() 函数
long long stoll(const std::string& str, std::size_t* pos = 0, int base = 10);
功能:将字符串str转成 long long 整数
参数:
str:字符串
pos:存储将字符串 str 转成 long long 整数,处理了 str 中字符的个数的地址,默认为 NULL
base:进制,10:十进制,8:八进制,16:十六进制,0:则自动检测数值进制,str 是 0 开头为八进制,str 是 0x 或 0X 开头是十六进制,默认为十进制
stoll() 函数指定转换字符串为十进制用法
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
long long a;
size_t pos = 0;
string str;
str = "-1235";
a = stoll(str);
cout << "a = " << a << endl; //a = -1235
str = "1235";
a = stoll(str);
cout << "a = " << a << endl; //a = 1235
str = " -12 35";
a = stoll(str, &pos); //会舍弃空白符
cout << "a = " << a << endl; //a = -12
cout << "pos = " << pos << endl; //pos = 5
str = " -12ab35";
a = stoll(str, &pos);
cout << "a = " << a << endl; //a = -12
cout << "pos = " << pos << endl; //pos = 5
str = "0123";
a = stoll(str);
cout << "a = " << a << endl; //a = 123
str = "0x123";
a = stoll(str);
cout << "a = " << a << endl; //a = 0
return 0;
}
对于stoi可能超出范围的字符串,不能用stoi(str) < INT_MAX去限制,而应该用范围更大的stoll先判断