🌞团子在这里先祝大家节日快乐啦!
🎈1.引例
有一个类型的题目是找出输出图形的规律,然后将其实现。观察下面的图形,应该如何输出呢?
A
BBB
🔎运用C++的语法,我们应当如何写出这个程序呢?
#include <iostream>
using namespace std;
int main()
{
cout << " A" << endl;
cout << "BBB" << endl;
return 0;
}
✅运行示例:
🔎如果是3行的话,应该怎么做呢?
A
BBB
CCCCC
#include <iostream>
using namespace std;
int main()
{
cout << " A" << endl;
cout << " BBB" << endl;
cout << "CCCCC" << endl;
return 0;
}
✅运行示例:
前面分别对应的是输出两层和三层的情况。我们输入需要输出的层数
n
,当n<=5
的时候,我们可以枚举n
的不同取值,然后分别输出。如果需要输出多层,按照上面的方法,可以完成任务,但是对应的代码量会更大,编码时间也更长。因此,当n>5
的时候,我们就需要一些其他的方法来简化代码实现。仔细发现,第i层输出的前面的空格数和字符的个数都是有规律的,我们可以根据n
和i
计算出来。对应输出的字符的ASCII
码值是'A'+i-1
,其中'A'
表示字符A
的ASCII
码值。然后我们就可以用循环控制输出。这里给大家看一看ASCII码表:
🎈2.例题一
按照题目描述,输出字母三角形:
样例输入1:
2
样例输出1:
A
BBB
样例输入2:
3
样例输出2:
A
BBB
CCCCC
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
string space = string(n - i, ' ');
string ch = string(2 * i - 1,'A' + i - 1);
cout << space + ch << endl;
}
return 0;
}
✅运行示例:
🎈3.例题二
这次我们输出一个稍微复杂的三角形,输入一个大写字母(A-Z)或者一个数字(1~9),如果输入的是F,那么输出的是:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
#include <iostream>
#include <string>
using namespace std;
int main()
{
char c;
cin >> c;
if (c >= 'A' && c << 'Z')
{
for (int i = 1; i <= c - 'A' + 1; i++)
{
for (int j = 1; j <= c - 'A' + 1 - i; j++)//每行空格数的总行数-所在行数
{
cout << " ";
}
for (int j = 1; j <= i; j++)
{
cout << (char)('A' + j - 1);//正向输出字符个数等于行数
}
for (int j = i - 1; j >= 1; j--)//逆向输出字符个数等于行数减1
{
cout << (char)('A' + j - 1);
}
cout << endl;
}
}
else
{
for (int i = 1; i <= c - '1' + 1; i++)
{
for (int j = 1; j <= c - '1' + 1 - i; j++)//每行空格数的总行数-所在行数
{
cout << " ";
}
for (int j = 1; j <= i; j++)
{
cout << (char)('1' + j - 1);//正向输出字符个数等于行数
}
for (int j = i - 1; j >= 1; j--)//逆向输出字符个数等于行数减1
{
cout << (char)('1' + j - 1);
}
cout << endl;
}
}
return 0;
}
✅样例输出:
🎈4.例题三
小蓝迷恋上了《我的世界》,在游戏里可以任意开发各种宏伟建筑。有一天他发现一块荒地上有很多宝藏,想在土地上建一栋房子把宝藏包围起来。假设地图是一个n行m列的方格地图,地图上每一个格子*表示一个宝藏。
比如2行2列的地图上:
**
**
那么需要建的房子如下:
+-+-+
|*|*|
+-+-+
|*|*|
+-+-+
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cout << "+-";
}
cout << "+" << endl;
for (int j = 1; j <= m; j++)
{
cout << "|*";
}
cout << "|" << endl;
}
for (int i = 1; i <= m; i++)
{
cout << "+-";
}
cout << "+" << endl;
return 0;
}
✅运行示例:
🎈5.字符串
"hello world.\n"
向上面这种由双引号引起来的一串字符称为字符串字面值,或者简称为字符串。
注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0只是作为结束的标志,不算作字符串内容。
✅详细关于字符串的知识请跳转到这篇博客: 字符串
很多情况下,都要对字符串进行复制、剪切、比较等操作,可以用循环来操作,但是会太繁琐,这里可以使用字符串操作的库函数。C/C++的字符串处理的相关函数在
string.h
头文件中。
🔭5.1字符串复制
C/C++中函数原型
char *strcpy(char *destin,char *source)
,将source
字符串复制到destin
.
🔎C/C++语言示例程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char name[10];
const char* str = "Justic";
strcpy(name, str);
cout << name << endl;
return 0;
}
✅运行示例:
🔭5.2字符串拼接
C/C++
中函数char *strcat(char *dest,char *source)
,将source
字符串拼接到dest
后面。
注意:dest
必须有足够的空间来容纳拼接出字符串。
🔎C/C++语言示例程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str1[15]= "Hello";
char str2[7] = " World";
strcat(str1,str2);
cout << str1 << endl;
return 0;
}
✅运行示例:
🔭5.3字符串的比较
C/C++
函数int strcmp(char *str1,char *str2)
,从第一个字符开始逐字符比较两个字符串,如果两个字符完全相同,则返回0
,如果第i位不相等,返回srt1[i]-str2[i]
.
🔎C/C++语言示例程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const char* p1 = "abcde";
const char* p2 = "abcdefd";
const char* p3 = "djhfjhdjfh";
const char* p4 = "vhdhuf";
cout << strcmp(p1, p2) << endl;
cout << strcmp(p1, p3) << endl;
cout << strcmp(p1, p4) << endl;
cout << strcmp(p3, p2) << endl;
return 0;
}
✅运行示例:
好啦,关于字符串的知识到这里就先结束啦,后期会继续更新学习蓝桥杯的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️