总结一下我认为遇到的比较骚的操作
1.stringstream
头文件 <sstream>
用法一:多个字符串拼接
stringstream sstream;
sstream<<"asd"<<" "<<"dfgdf";
用法二:
当一行里面有多个字符串,且带有空格
我们想把他分开
用这个就特别骚
比如:
wo ai zhong guo
wo ai hhy
我们要读取的话
一般情况前面会有一个n,表示有多少行
string str;
cin>>n;
getchar();//读取缓冲区的回车
while(n--)
getline(cin,str)
stringstream s;
s<<str;
string t;
while(s>>t)
{vector.push_back(t);}
//这样我们就可以把这些字符串分开
2.scanf的正则化
(在特定的一些很复杂的输入中,这个东西真的很好用)
输入指定范围的小写字符,遇到非法就停止
scanf("%[a-z]",str1);
printf("%s\n",str1);
输入:abc123
输出:abc
输入不包括指定字符的字符
scanf("%[^a-z]", str1);
printf("%s\n",str1);
输入:123 456abc123
输出:123 456
注意:这种方式可以读入空格
scanf("%[^\n]", str1);
printf("%s\n",str1);
%表示选择,%后面的是条件,比如"%s",s是一个条件,表示任意字符,"%s"的意思是:只要输入的东西是一个字符,就把它拷贝给str。"%3s"又多了一个条件:只拷贝3个字符。 “%[a-z]”的条件稍微严格一些,输入的东西不但是字符,还得是一个小写字母的字符。
%* 与%刚好相反,表示过滤满足条件的字符,也就是跳过满足条件的字符,其后一定要有新的%语句,否则无法读入
更多使用
https://www.cnblogs.com/orange1438/archive/2013/05/12/4544958.html
3.string 的一些好的用法
string s(str, strbegin,strlen):
将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
string s(cstr, char_len):
以C_string类型cstr的前char_len个字符串作为字符串s的初值
string s(num ,c):生成num个c字符的字符串
string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
string str3("12345", 0, 3);//结果为"123"
string str4("012345", 5); //结果为"01234"
string str5(5, '1'); //结果为"11111"
string str6(str2, 2); //结果为"3456789"
4.string 的一些函数使用
string类型支持直接比较
还有s.compare()函数
尾插 push_back()
位置插 insert(pos,char)
<string>
tolower(char)//变小写函数
toupper(char) //变大写
find(char*);
可以这样用:
if(s.find('#') == string::npos )
其中string::npos 是一个代表未找到的值
所以就是没有找到 #
s.rfind() //反向查找
sort(s.begin(),s.end()) //排序
分割函数
s.substr(2,5) //表示第二个位置开始,长度为5
5.<ctype.h> 也蛮好用的
isalnum(int) //是否为字字母和数字
isalpha(int) //是否字母
isdigit(int) //是否为10进制数字
islower(int) //是否小写字母
isupper(int) //是否大写字母
6.<cstring>
memset(c,0,sizeof c) //快速填充 只有-1和0
#include //不可以定义string s;可以用到strcpy等函数
#include //可以定义string s;可以用到strcpy等函数
#include //不可以定义string s;可以用到strcpy等函数
cstring里面包含了很多可以对char*进行操作的函数
有些效果还不错,因为如果不用string而用char*的话
还是要用到这些函数的
1.strcpy 复制
strcpy(a,b) //a = b
2.strncpy 部分复制
strncpy(a,b,sizeof b) //a=b
3.strcat 合并
strcat(a,b) //a=a+b
4.strncat 部分合并
strncat(a,b,21)
5.strchr 查找字符
char* strchr(char* s, char c);
功能: 查找字符串s中首次出现字符c的位置
说明: 返回首次出现c的位置的指针,如果s中不存在c则返回NULL
t=strchr(src,'?')-src;
6.查找字符串
t=strstr(src,"thing")-src;
7.strcmp 比较(常用一点)
int strcmp(char* s1, char* s2);
说明: 当s1 < s2时,返回值<0;
当s1 = s2时,返回值=0;
当s1 > s2时,返回值>0
8.stricmp(不区分字母的大小写)
int stricmp(char* s1, char* s2);
说明: 当s1 < s2时,返回值<0;
当s1 = s2时,返回值=0;
当s1 > s2时,返回值>0
9.strupr(小写转大写)
strupr(s);
10.strlwr(大写转小写)
strlwr(s);
11.strrev(倒置)
strrev(s);
7.printf 对特定输出的用法
(printf规则输出比cout好用,cout一堆东西完全不好记忆)
printf("%6d",a) //左边补空格
printf("%06d",a) //左边补0
printf("%-6d",a) //右边补空格
printf("%.4f",a) //保留4位小数
printf("%6.4f",a) //整数部分6位补空格,小数部分4位
printf("%x",c) //16进制
8.文件操作
FILE *in,*out;
in = fopen("file.in","rb");
out = fopen("file.out","wr");
fscanf(in,"%d %d",&a,&b);
fprintf(out,"%d",a+b);
fclose(in);
fclose(out);
文件重定向 c
FILE *freopen( const char *filename, const char *mode, FILE *stream );
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
//如果想改回来,需要重新打开标准控制台设备文件,这个跟系统有关
//Windows系统下
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
//Linux系统下
freopen("/dev/console", "r", stdin);
freopen("/dev/console", "w", stdout);
(用的不多) 可能平时自己调试的时候会用