C++代码格式和语法基础
#include<bis/stdc++.h>
万能头文件,包含所有c++中所有标准库的头文件,竞赛常用,可以提高便捷性
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
通常是用于禁用 C++ 的标准输入输出同步,以提高输入输出的速度。
i 的两种写法
for(int i=1;i<=n;i++) for(int i=0;i<n;i++)
'\n' 转义字符比endl; 要快好多,推荐用'\n'
c语言的输入输出
scanf("%d %d",&a,&b);
scanf
函数用于从标准输入(通常是键盘)读取输入。在这里,"%d %d"
是格式控制字符串,指定了要读取两个整数。&a
和&b
是变量地址,表示将读取的整数存储到变量a
和b
中。
"%d %d"
中的空格表示在输入中两个整数之间可以有任意数量的空格(包括零个)。
printf("%d,%d\n",a,b);
printf
函数用于将输出格式化并打印到标准输出(通常是屏幕)。"%d, %d\n"
是格式控制字符串,指定了要打印两个整数,中间用逗号分隔,并在末尾输出一个换行符。%d
是格式占位符,表示要输出一个整数。a
和b
是要输出的整数值。-
scanf("%lf", &a[i]);
是C语言中用于从标准输入读取一个双精度浮点数(double)并将其存储在数组a
的第i
个位置的语句。
蓝桥第一题
在蓝桥镇,妮妮发明了一个新的游戏——翻转游戏。游戏中有一个开关,可以处于两种状态:开(用 1 表示)和关(用 0 表示)。妮妮发现,无论开关当前处于何种状态,他都可以通过一次操作使得开关的状态翻转。现在,妮妮告诉你开关当前的状态 xx,他想知道如果他做一次操作,开关的状态会变成什么。你能帮助他解答这个问题吗?
输入格式
输入仅一行,包含一个整数 x(0<=x<=1),表示开关当前的状态。
输出格式
输出一行,表示如果妮妮做一次操作后,开关的状态。
样例输入
0
样例输出
1
在这个样例中,开关当前的状态是关(0),所以妮妮做一次操作后,开关的状态会变为开(1)。
题解c++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x;
cin>>x;
int result=1-x;
cout<<result<<'\n';
return 0;
}
string 简介
string封装了字符串的储存和管理,自动处理字符串的内存分配和释放,避免手工处理。
可以动态调整字符串的大小
支持迭代器,可以遍历字符串中的字符,进行字符级别的操作。
读入一行字符串的方式
getline(cin,s)
易错用法阐释
string str1="hello world";
string str2= str1.substr(0,5);
左闭右开,由于索引从0开始,所以对应 0,1,2,3,4.——hello
代码分析:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "hello world";
size_t pos = str.find("world");
if (pos != string::npos) {
cout << "substring found at position " << pos << endl;
} else {
cout << "substring not found" << endl;
}
return 0;
}size_t pos = str.find("world");
:使用 find
函数在字符串 str
中查找子字符串 "world",并将结果存储在 pos
变量中。如果找到了子字符串,则 pos
的值为子字符串在原始字符串中的起始位置;如果未找到,则 pos
的值为 string::npos
。
if (pos != string::npos) {
:条件判断,检查 pos
是否不等于 string::npos
,即判断是否找到了子字符串。
整体来说,这段代码演示了如何在字符串中查找子字符串,以及如何根据查找结果输出相应的信息。
代码分析2:
#include<iostream>
#include<string>
using namespace std;
int main()
{ string s="hello";
for(int i=0;i<s.length();++i)
cout<<s[i]<<endl;
return 0; }
for(int i = 0; i < s.length(); ++i)
:使用 for
循环,初始化变量 i
为 0,循环条件是 i
小于字符串长度 s.length()
,每次循环结束后 i
自增。
cout << s[i] << endl;
:在循环体内,使用 cout
输出字符串 s
中索引为 i
的字符,并在每次输出后换行。
整体来说,这段代码遍历了字符串 "hello" 中的每个字符,并将其逐个输出到标准输出流,每个字符占一行。结果会是:
h
e
l
l
o
string str ="hello world";
str.replace(7,5,"universe")//替代子字符串
7为字串起始位置,5是长度 和substr用法相似
字典序的比较方法
是从小到大一个一个比较,一旦遇到不相等的字符就确定关系。
常见的string遍历的方法有两种:
1.循环枚举下标
2.auto枚举
for (auto &i : s)
{ i = 'a';
cout << i << "\n"; }
其中&表示取引用类型,如果对i修改将会改变原来的值。
反转字符串中的字符
蓝桥杯一题
题目描述
实现一个算法来实现反转字符数组的功能。反转的要求如下:
-
将字符数组的字符进行反转,例如 ['b', ' ', 'a', 'r'] 变成 ['r', 'a', ' ', 'b']。
-
将字符数组替换为反转后的数组。
输入描述
读入一行字符串,长度不超过 100,字符串可能含有空格。
输出描述
输出一行字符串,该字符串为读入字符串的反转字符串
#include <iostream>
#include <string>
#include <algorithm> // 添加这行头文件
using namespace std;
int main() {
string s = "kellp";
getline(cin, s);
reverse(s.begin(), s.end());
cout << s << endl;
return 0;
}