
字符
getchar()获取单个字符
putchar()输出单个字符
isdigit()判断是否是数字
islower()判断是否是小写
isupper()判断是否是大写
isalpha()判断字母
字符数组
puts(str)多个字符存到数组
gets(str)输出一整行字符串
fgets(str,100,stdin)获取一整行 100长度
strcat(str1,str2)把str2连接到str1后面
strcmp(str1,str2)比较两个字符串,正数:1大;;0:一样;负数:2大
strlen(str)获取长度
字符串
getline(cin,str)获取一整行
str.substr(i,2)获取子串,从i开始,获取长度为2的子串
str.find(str2) 在str中查找str2,返回所在的下标,没找到返回string::npos
str.rfine(str2)同find,但是从右向左找
str.erase(i,l) 从i开始,删除长度为l的字符串
str.insert(i,str2)在i的位置前,插入str2
str.size( ) 获取str的长度
str.c_str( ) 获取str对应的char【 】
str.begin( ) 获取str的首地址
str.end( ) 获取str的尾地址(最后一个元素后面)
内建函数
__builtin_ ffs(x) 返回x中最后一个为1的位置(12-1100)-3的位置
__builtin_popcount(x) x中1的个数
__builtin_ctz(x) 末尾0的个数
__builtin_ctr(x) 前导0的个数
__builtin_parity(x) x中0的奇偶性,1有偶数个返回0,否则返回1
将字符串转成数字:
1.借用bitset将01字符串变成无符号整数
string a = "1001";
bitset<64> b(string("1001"))
bitset<64> b(a)
cout<<b.to\_ulong()
2.用sscanf() 函数把字符数组里面的字符串打印到数值变量里面
int buf;
sscanf("123456","%d",&buf)
printf("%d\\n",buf)
3.用sprintf()把数据打印到字符数组里面
char s[100]
sprintf(s,"%d",123)
4.用直接的方式
string s = "1234";
int n = 0;
for(int i = 0;i<4;i++){
n = n\*10+s[i]-'0';
}
5.一般用法
char buf[512] = ;
sscanf("123456 ", "%s", buf);
printf("%s\\n", buf);
结果为:123456
1. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf);
printf("%s\\n", buf);
结果为:12342. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\\n", buf);
结果为:123456
3. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\\n", buf);
结果为:123456abcdedf
4. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\\n", buf);
结果为:123456abcdedf
5、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将
非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%\*[^/]/%[^@]", buf);
printf("%s\\n", buf);
结果为:12DDWDFF
6、给定一个字符串"hello, world",仅保留"world"。(注意:“,”之后有一空格)
sscanf("hello, world", "%\*s%s", buf);
printf("%s\\n", buf);
结果为:world P.S. %\*s表示第一个匹配到的%s被过滤掉,即hello,被过滤了,如果没有空格则结果为
NUL
```