许昌网站建设浏览器下载
C++语法基础
- 数组
- 知识点
- 题目
- 字符串
- ASCII码
- 字符数组
- 字符串输入输出
- 字符串操作
- 遍历字符串
- 字符串流
- 题目
数组
字符串
所有题目来自ACWing
👇从零开始学C++系列👇
从零开始学C++之基本知识
从零开始学C++之数组和字符串
从零开始学C++之函数、结构体、类、指针、引用
从零开始学C++之STL容器、位运算与常用库函数
数组
知识点
全局变量的定义,默认值为0
,存在堆空间,无长度限制,堆里虚拟分配,使用再开内存,没开的时候标记全部指向0,零页
局部变量,默认值是随机的,存在栈空间,在栈空间中的变量会占内存
定义数组
int a[100], b[10];float c[20];double d[10];char e[14];string g[25]; // 字符串数组 单个元素是一个字符串//相当于二维数组
cstring
头文件中的一些函数
memset()
初始化: -> 比循环赋值效率高- 赋值是按字节赋值,因此只有赋予
-1
和0
时才与预期一致。其最后一个参数的单位是Byte
格式memset(数组名, 将每个字节初始化成什么值, 初始多长(单位是Byte))
例如:memset(a, 0, sizeof a);
将数组a赋为全0 memcpy()
复制:- 格式:memcpy(目标数组名, 源数组名, 源数组Byte长度)
memcpy(b, a, sizeof a);
sizeof 可不加括号,即可这样使用sizeof a,其返回单位是Byte
题目
753. 平方矩阵 I
754. 平方矩阵 II
756. 蛇形矩阵
字符串
ASCII码
背下来
- 48 ~ 57 : 0 ~ 9
- 65 ~ 90 : A ~ Z
- 97 ~ 127 : a ~ z
字符数组
字符串是字符数组加上结束符"\0",字符数组长度至少比字符串多1
//环境 VSCodechar a1[] = {'B', '+', '+', '\0'};char a2[] = "C++";char a3[] = {'A', '+', '+'};char a4[] = {'C', '\0'};cout << sizeof a2 << endl; // 4cout << sizeof a3 << endl; // 3printf("%s\n", a2);//输出是C++printf("%s\n", a3); //输出是A++C++
字符串输入输出
- 输入
C语言
char s[N];
scanf("%s", s); // 不能读取含空格、换行符的字符串
gets(s); // 能读取含空格的字符串,同时自动去掉换行符\n
fgets(s, N, stdin); // 能读取含空格的字符串,但不会去掉换行符\n。【注意】
C++
#include <string>
string str;
cin >> str; // 能读取含空格、不能读换行符的字符串
getline(cin, str); // 能读取含空格的字符串,同时自动去掉换行符\n
- 输出
puts(s);
printf("%s\n", s);
cout << s << endl;
字符串操作
库<string>
#include <string>// 初始化
string s1; // 默认空字符串
string s2 = s1; // s2是s1的一个副本
string s2 = "hiya"; // s3是该字符串字面值的一个副本
string s4(10, 'c'); // s4的内容是cccccccccc//读入/输出
//不能用scanf读入,但可以用printf输出
cin >> s1;
getline(cin, s1);
printf("%s", s1.c_str()); // 返回存储s1的字符数组的首地址,用printf输出
puts(s1);s1.empty(); // 判断是否为空字符串
s1.size(); // 长度,与stelen()不同的是,这个复杂度是O(1),不用额外的变量保存
s1.pop_back(); // 删掉最后一个字符
s1.substr(begin, length); //位置指定的子串// 按字典序比较 ">"、"<"
// 加法拼接时,要保证加号两边至少有一个string变量for (char ch : str) {...} // 遍历(不可修改字符)
for (char &ch : str) {...} // 遍历(可修改字符)auto s; // 可以自动判别类型
遍历字符串
双指针算法
从前向后遍历整个字符串
for(i=0;i<len;i++)
{//用j把和s[i]相等的这一整段全部找到int j = i;while(j<len&&s[j]==s[i]) j++;//j是不等于i的第一个字符i = j-1;
}
字符串流
库<sstream>
#include <sstream>string s;
stringstream ssin(s);
while(ssin >> s) {...} // 按空格拆分成 字符串s,例如英语句子拆分单词// 可用如下代码代替
while(cin >> word) {...
}
题目
763. 循环相克令
772. 只出现一次的字符
770. 单词替换
771. 字符串中最长的连续出现的字符
777. 字符串乘方
779. 最长公共字符串后缀