c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
文章目录
- c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
- @[TOC](文章目录)
- c/c++:多维数组,三维数组【了解】
- 字符数组和字符串
- 统计不同字符出现的次数
- scanf如何输入带空格的字符串呢???
- 总结
文章目录
- c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
- @[TOC](文章目录)
- c/c++:多维数组,三维数组【了解】
- 字符数组和字符串
- 统计不同字符出现的次数
- scanf如何输入带空格的字符串呢???
- 总结
c/c++:多维数组,三维数组【了解】
层行列
数组类型 数组名[层][行][列]
easy
0层下:放一个二维数组
1层下,放一个二维数组
void f47(void)
{
int a[2][3][3] = {
{{1,2,3},
{1,2,3},
{1,2,3}},
{{1,2,3},
{1,2,3},
{1,2,3}}
};//2层,3*3的数组
//打印一样的
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3; k++)
{
printf("%d ", a[i][j][k]);
}
printf("\n");
}
printf("\n");
}
}
int main(void)
{
f47();
system("pause");
return 0;
}
easy
反正就是这样搞的
不管多少维,都是这样堆叠出去的。
字符数组和字符串
区别
字符串屁股是有一个\0的哦
字符数组是没有的
和int数组类似
改char即可
void f48(void)
{
char str[10] = { 'a','b','c' };//字符数组没有\0
char s[3] = { 'a','b','\0' };//很麻烦
char s1[]="ab";//这种定义才完美,默认和s相同
for (int k = 0; k < 3; k++)
{
printf("%c", str[k]);
}
printf("\n");
for (int k = 0; k < 3; k++)
{
printf("%c", s[k]);
}
printf("\n");
printf("%s\n", s1);//遇到\0才会结束哦
}
int main(void)
{
f48();
system("pause");
return 0;
}
void f48(void)
{
char str[10] = { 'a','b','c' };//字符数组没有\0
char s[3] = { 'a','b','\0' };//很麻烦
char s1[]="ab";//这种定义才完美,默认和s相同
for (int k = 0; k < 3; k++)
{
printf("%c", str[k]);
}
printf("\n");
for (int k = 0; k < 3; k++)
{
printf("%c", s[k]);
}
printf("\n");
printf("%s\n", s);//遇到\0才会结束哦
printf("%s\n", s1);//遇到\0才会结束哦
}
字符数组你直接打印可能gg
定义字符串最好这样:
char s1[]="ab";//这种定义才完美,默认和s相同
双引号它自动给你加\0哦
统计不同字符出现的次数
这好说
因为字符是ASCII码
它整个码字范围小于256
所以我们搞一个很简单的数组表示即可
abc的a的ASCII 码是多少来着?
65?
不是,它是A
a是97
所以呢,这些你都不管的
你只需要把数组的这个97号位置,存放计数即可
void f49(void)
{
/*printf("%d\n", 'A');
printf("%d\n", 'a');*/
char str[100];//多输入点字符串
//统计,用count数组
int count[256] = { 0 };//默认全部0次
int i = 0;//索引字符串的位置
while (1)
{//遇到\n结束
char c;
scanf("%c", &c);//每次挪动一个i
if (c == '\n')
{
i--;//去把\n干掉
str[i] = '\0';//这是字符串结尾
break;//结束输入
}
else
{//计数
str[i++] = c;
count[c]++;
}
}
//打印字符
for (int k = 0; k < 256; k++)
{
if (count[k] !=0)
{
printf("%c频次:%d\n", k, count[k]);//字符和count
}
}
}
int main(void)
{
f49();
system("pause");
return 0;
}
count的下标就是字符的ASCII码就行
好说
反正str字符串接受字符串就行
然后count统计各个字符的长度,空间复杂度也就o(1)
反正好说
这就是会数据结构与算法后,写算法代码那是轻而易举的事情。
printf("%s频次\n", str);
多打印一下字符串
scanf如何输入带空格的字符串呢???
正常情况下,空格划分开字符,如果字符串中就想要输入空格呢?
那咋整
注意事项:scanf的特性
1:用于存储字符串的空间要足够,防止溢出
2:获取字符串用%s,遇到空格或者回车结束
void f50(void)
{
char str[10];//9个字符
scanf("%s", &str);
printf("%s", str);
}
int main(void)
{
f50();
system("pause");
return 0;
}
懂?
通过:
正则表达式“字符组合应用”
杜绝遇到空格gg
sacnf(“%[上尖括号^\n]s”,&str);
上尖括号^表示,除去\n,剩下的我都接受,包括空格
void f50(void)
{
char str[10];//9个字符
scanf("%[^\n]s", &str);//除去空格之外的字符我都要了
printf("%s", str);
}
int main(void)
{
f50();
system("pause");
return 0;
}
牛逼的
确实OK
%[]s
总结
提示:重要经验:
1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。