基础语法笔记

变量、输入输出、表达式与顺序语句

头文件

#include <cstdio>  //scanf,printf

#include <iostream>  //cin,cout

using namespace std;  //命名空间(std::cout )

 变量类型及范围

bool false(0)/true(1)    1byte
char 'C', 'a', ' ', '\n'    1byte
int -2147483648 ~ 2147483648    4byte
float 1.23, 2.5, 1.235e2(1.235乘十的平方)  //单精度浮点数,6-7位有效数字    4byte
double //15-16位    8byte

long long  //-2^63 ~ 2^63-1    8byte
long double  //18-19位有效数字    12byte 16byte

变量定义 

 

变量输入输出

 

 扩展功能

float, double等输出保留若干位小数时用:%.4f, %.3lf
最小数字宽度:

a. %8.3f, 表示这个浮点数的最小宽度为8,保留3位小数,当宽度不足时在前面补空格。
b. %-8.3f,表示最小宽度为8,保留3位小数,当宽度不足时在后面补上空格
c. %08.3f, 表示最小宽度为8,保留3位小数,当宽度不足时在前面补上0

'单引号'字符, “双引号"字符串

判断语句

符号

 

循环语句

for循环

for (init-statement : condition: expression)
{
    statement
}

init-statement可以是声明语句、表达式、空语句,一般用来初始化循环变量;
condition是条件表达式,和while中的条件表达式作用一样;可以为空,空语句表示true;(死循环);
expression一般负责修改循环变量,可以为空。

 

例题:

递增序列:

数组

多维数组

int a[3][4]; // 大小为3的数组,每个元素是含有4个整数的数组。

int arr[10][20][30] = {0}; // 将所有元素初始化为0
// 大小为10的数组,它的每个元素是含有20个数组的数组
// 这些数组的元素是含有30个整数的数组
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int b[3][4] = {         // 三个元素,每个元素都是大小为4的数组
        {0, 1, 2, 3},       // 第1行的初始值
        {4, 5, 6, 7},       // 第2行的初始值
        {8, 9, 10, 11}      // 第3行的初始值
    };

    return 0;
}

字符串

常用ASCII值

'A'- 'Z'是65 ~ 90,'a' - 'z'是97 - 122,0 - 9是 48 - 57

字符数组  

每个字符串结尾会暗含一个'\0'字符,因此字符数组的长度至少要比字符串的长度多1.

输入输出 

#include <iostream>

using namespace std;

int main()
{
    char str[100];

    cin >> str;             // 输入字符串时,遇到空格或者回车就会停止
    cout << str << endl;    // 输出字符串时,遇到空格或者回车不会停止,遇到'\0'时停止
    fgets(str, 100, stdin);  // gets函数在新版C++中被移除了,因为不安全。
                             // 可以用fgets代替,但注意fgets不会删除行末的回车字符
                             //(读入一行字符串,包括空格)
    printf("%s\n", str);

    return 0;
}

常用操作

#include <string.h>
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char a[100] = "hello world!", b[100];

    cout << strlen(a) << endl;  //求字符串的长度

    strcpy(b, a);  //将字符串b复制给从a开始的字符数组

    cout << strcmp(a, b) << endl;  //将字符串b复制给从a开始的字符数组//比较两个字符串的大小,
                                    //a < b返回-1,a == b返回0,a > b返回1

    return 0;
}

遍历字符 

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    char a[100] = "hello world!";

    // 注意:下述for循环每次均会执行strlen(a),运行效率较低,最好将strlen(a)用一个变量存下来
    for (int i = 0; i < strlen(a); i ++ )
        cout << a[i] << endl;

    return 0;
}

标准库类型string

定义和初始化

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1;              // 默认初始化,s1是一个空字符串
    string s2 = s1;         // s2是s1的副本,注意s2只是与s1的值相同,并不指向同一段地址
    string s3 = "hiya";     // s3是该字符串字面值的副本
    string s4(10, 'c');     // s4的内容是 "cccccccccc"

    return 0;
}

输入输出

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2;

    cin >> s1 >> s2;        //空格会停
    cout << s1 << s2 << endl;
    printf(“%s”, s.c_str());
    getline(cin, s);        //读取一整行

    return 0;
}

 常用操作

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1, s2 = "abc";

    cout << s1.empty() << endl;  //空为1(真)
    cout << s2.empty() << endl;

    cout << s2.size() << endl;  //长度

    return 0;
}

 字面值和string对象相加

当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string

string s4 = s1 + ", ";  // 正确:把一个string对象和有一个字面值相加
string s5 = "hello" + ", "; // 错误:两个运算对象都不是string

string s6 = s1 + ", " + "world";  // 正确,每个加法运算都有一个运算符是string
string s7 = "hello" + ", " + s2;  // 错误:不能把字面值直接相加,运算是从左到右进行的

处理string对象中的字符

 string对象当成字符数组来处理

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s = "hello world";

    for (int i = 0; i < s.size(); i ++ )
        cout << s[i] << endl;

    return 0;
}

 使用基于范围的for语句

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s = "hello world";

    for (char c: s) cout << c << endl;//这个循环将逐个获取字符串 s 中的字符,并将其赋值给变量         
                                      //c。然后,每个字符将被输出到标准输出流中,每个字符之后都    
                                      //会添加一个换行符。这样可以用于将字符串 s 中的    字符逐 
                                      //行打印出来

    for (char& c: s) c = 'a'; // 通过引用(&)方式声明变量 c。这意味着我们可以直接修改字符串 s 
                              //中的字符。在这个循环中,将字符串 s 中的每个字符都设置为字符'a'

    cout << s << endl;

    return 0;
}

字符串插入

a.substr(0, p + 1) + b + a.substr(p + 1)

函数

结构体,类,指针,引用

链表

struct Node
{
    int val;
    Node* next;
} *head;
//定义了一个名为 Node 的结构体,其中包含一个整数变量 val 和一个指向下一个节点的指针 next

int main()
{
    for (int i = 1; i <= 5; i ++ )
    {
        Node* p = new Node();
        p->val = i;
        p->next = head;
        head = p;
    }
//在 main 函数中,通过一个循环创建了包含 1 到 5 的链表。循环从 1 开始,每次迭代都会创建一个新的节点 //p,并将当前迭代的值赋给 p 的 val 成员。然后,将 p 的 next 指针指向当前链表的头节点(head)。最 
//后,将 head 指针指向 p,使得 p 成为新的头节点。这样就完成了链表的插入操作

    for (Node* p = head; p; p = p->next)
        cout << p->val << ' ';
//利用指针 p 遍历链表,从头节点开始,直到链表结束(即指针 p 为 NULL)。在循环中,输出 p 的 val 成 //员的值,并在每个元素之间添加一个空格。最后,输出一个换行符,结束打印
    cout << endl;

    return 0;
}

栈和队列:栈和队列(详细版,一看就懂。包含栈和队列的定义、意义、区别,实现)_瞬间的永恒~~的博客-CSDN博客

哈希表:数据结构 5分钟带你搞定哈希表(建议收藏)!!!_哈希表怎么画_WhiteShirtI的博客-CSDN博客 

STL容器,位运算与常用库函数

位运算

 常用库函数

reverse翻转

unique去重

random_shuffle随机打乱

sort

lower_bound/upper_bound 二分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值