目录
变量基本类型及其大小
整形 int 2^31 30→3*3→ 十进制9个0
十进制9个0 -> 9/3=3 30 约为2^30
2^63 60→ 6*3→十进制18个0 [大概]
输入输出
字符串输入输出
C++如何输入含空格的字符串
①cin是C++中最常用的输入语句,当遇到空格或者回车键即停止
②若定义变量为string类型,注意不是字符型数组。则要考虑getline()函数。用法如下:
int main()
{ string st;
getline(cin,st);
cout<<st<<endl;
return0;
}
③若定义变量为字符型数组
cin.getline (char *str, int maxnum)(包含头文件#include <string>)
cin.getline()函数可以同cin.get()函数类似,也可接收空格,遇回车结束输入。
int main()
{
char st[50];
cin.getline(a,50);
cout<<a<<endl; // 输出也可以用printf("%s",st);
return0;
string 字符串操作
字符数组转化成string类型
char ch [] = "ABCDEFG";
string str(ch);//也可string str = ch;
或者
char ch [] = "ABCDEFG";
string str;
str = ch;//在原有基础上添加可以用str += ch;
将string类型转换为字符数组
char buf[10];
string str("ABCDEFG");
length = str.copy(buf, 9);
buf[length] = '\0';
或者
char buf[10];
string str("ABCDEFG");
strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);
判断字符串是否为空
①string 直接调用empty()方法
② 字符数组 if(str[0]=='\0') break;
检查字符串是否升序
bool flag=false;
int len=strlen(str);
for(i=1;i<len;i++){
if(str[i]<=str[i-1])
{
flag=true; //证明不是升序
break;
}
}
字符数组分割
C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
下面是 strtok() 函数的声明。
char *strtok(char *str, const char *delim)
参数
- str -- 要被分解成一组小字符串的字符串。
- delim -- 包含分隔符的 C 字符串。
用法:
#include <string.h>
#include <stdio.h>
int main () {
char str[80] = "This is - www.runoob.com - website";
const char s[2] = "-";
char *token;
/* 获取第一个子字符串 */
token = strtok(str, s);
/* 继续获取其他的子字符串 */
while( token != NULL ) {
printf( "%s\n", token );
token = strtok(NULL, s);
}
return(0);
}
输入空行结束
char tmp;
char str[300];
while(cin.getline(str,300)) // 输入以空行结束这样进行判断
{
if(str[0]=='\0') break;
//....
}
sscanf
从字符串中读入各种类型的数据,也可以用于将字符串转换成整数
sscanf(str,"%s%s%s%lf",record[n].name,record[n].syear,record[n].stime,&record[n].time); //注意double要加&
字符串的比较(string和char[] )
传统的c字符串比较必须用strcmp函数:(不能用==,否则比较的只是两个地址)
函数名: strcmp
功 能: 串比较
用 法: int strcmp(char *str1, char *str2);
看Asic码,str1>str2,返回值 > 0;两串相等,返回0
上面的头文件为<string.h> strncasecmp()是忽略大小写的。
c++ string 类型的比较可以用string的函数compare()
int compare ( const string& str ) const;
int compare ( const char* s ) const;
或直接用==比较
参考链接:https://www.cnblogs.com/youxin/archive/2012/06/21/2558279.html
STL注意和常用函数
map find
map<int,int>::iterator its=mp.find(it->first+k);
if(its!=mp.end()){
count++;
}
数学相关公式和模板
组合数学
利用的就是 组合数 与 杨辉三角 的关系 建立一个二维数组C[n][m] 打表
就能看到他们之间关系密切啊!区别就是顶点的值,杨辉三角为1,组合数为0)
其实这个“关系”是有数学公式的
写成递推关系就是
组合数打表如下:
c[n][m]=c[n-1][m-1]+c[n-1][m]
int C[50][50]; //组合数 void initTable(){ for(int i=0;i<=26;i++){ for(int j=0;j<=i;j++){ if(i==j || j==0) C[i][j]=1; else C[i][j]=C[i-1][j-1]+C[i-1][j]; } } C[0][0]=0; }
参考链接:https://blog.csdn.net/lyy289065406/article/details/6648492