一些小知识点
printf("%5d",a)表示是让int a 的宽度是5,前面用空格占用
“%05d” 是用0占用,“%-5d”是让数字后面用空格占用
“%-5.3lf”浮点数同样可以用
外边不可以用括号里面的变量(作用域问题)
long long 对应printf("%lld")
数组的相关问题
1. 数组的初始化
int a[10];
memset(a, 0, sizeof a) ; sizeof后面可以带括号也可以不带
a是表示要初始化的数组,0表示字节不是要初始化的数,0和-1可以得到0,-1
2. 数组的翻转
头文件
#include<algorithm>
a[20]
reverse(a,a+20) (前开后闭相当于[0,19]的进行翻转)
字符串
1.char a1[]={'c','+','+'}
char a2[]={'c','+','+',"\0"} char a3[]="c++" (a2,a3都是字符串)
2.char s[100]; 一般的读写会遇到空格,回车自动结束
读取一行字符串的话 用到fgets(s,100,stdin)(100代表读100个字符)会读入最后一个回车
也可以用cin.getline(s,100)
字符串数组用puts可以直接全部输出
string s; getline(cin,s) 是把一行读到string里面
puts(s) 相当于 printf("%s\n",s)
3.ASCII码'A'-'Z':65-90 'a'-'z':97-122 '0'-'9':48-57
(都可参与运算被当成整数)
4.#include<cstring>
char s[100];
cin>>s;
for(int i=0;i<strlen(s);i++)这个是双重循环,会慢一点因为strlen(s)是循环求的长度
for(int i=0,int n=strlen(s);i<n;i++)这样就没有双重循环了
5.对一个string进行遍历可以用 for(char &c : a) cout << c << ' '; &取地址符可以更新
6.string的相关函数
string s;
s.substr(0,3) 代表从零开始长度为3的进行切割,如果后面什么不加就代表到结尾
s.back() 表示s的最后一个字符
s.pop_back() 把最后一个字符去掉
7.字符流函数
#include<sstream>
string s;
getline(cin,s);
stringstream scin(s);(scin是自己定的可以随便设置)
string s1;
while(scin>>s1) (此时的s1不是单个的字符,可以使一串)
(参考题目770:单词的替换)
8.第一类双指针算法
string s;
for(int i=0;i<s.size();i++)
{
int j=i;
while(j<s.size()&& s[i]==s[j]) j++;
i=j-1;
}
(参考题型771.字符串中最长的连续出现的字符)