zy_蓝桥杯_C++学习系列一_语法基础

news/2025/12/1 20:06:13/文章来源:https://www.cnblogs.com/zy-ahpu/p/19288649
zy_蓝桥杯_C++学习系列一_语法基础

C++语法基础二

1.数组初始化

全局数组:作用域覆盖整个程序,存放在静态存储区,内存是固定分配的,会默认自动初始化为 0。

局部数组:局部范围,存储在栈区,内存是动态分配的,没有默认初始化逻辑,元素值会是随机的脏数据。

// 全局数组:作用域全局,自动初始化为0
int global_arr[5];
void test() {// 局部数组:仅在test函数内有效,元素为随机值int local_arr[5];
}

2.函数

2.1函数基本结构:

返回值类型 函数名(参数列表) {
// 函数体
return 返回值; // 如果有返回值的话

}

2.2函数常见用法

  • 无参数无返回值的函数

  • 有参数有返回值的函数

  • 多参数函数

  • 函数的重载 ( 和 Java 中的重载类似,同一作用域内,函数名相同,参数列表不同”(参数类型、数量、顺序至少一项不同),与返回值类型无关 )

#include <iostream>
using namespace std;
int add(int a, int b) {return a + b;
}
double add(double a, double b) {return a + b;
}
int main() {cout << add(3, 4) << endl;        // 输出7cout << add(3.5, 4.5) << endl;    // 输出8.0return 0;
}
  • 递归函数

3.string

3.1 string的声明与初始化

#include <iostream>
#include <string>
int main(){// 声明并初始化一个空字符串std::string str1;// 使用字符串变量初始化字符串std::string str2 = "Hello, World";// 使用另一个 std::string 对象来初始化字符串std::string str3 = str2;// 使用部分字符串初始化字符串,substr(起始位置,长度)std::string str4 = str2.substr(0, 5);// 使用字符数组初始化字符串const char *charArray = "Hello";std::string str5(charArray);// 使用重复的字符初始化字符串,string(个数,字符)std::string str6(5, 'A');// 输出字符串内容std::cout << "str1:" << str1 << std::endl;std::cout << "str2:" << str2 << std::endl;std::cout << "str3:" << str3 << std::endl;std::cout << "str4:" << str4 << std::endl;std::cout << "str5:" << str5 << std::endl;std::cout << "str6:" << str6 << std::endl;return 0;
} 

注意:输入整行字符串(含空格)时,默认的 cin >> str 会在空格 / 换行处停止读取,若需读取包含空格

的整行字符串,需使用 getline(cin, str)。

3.2 string输出 (printf)

  • 在 C++ 中,std::string 类提供了一个成员函数 c_str (),用于返回一个指向以空字符结尾的 C

    风格字符串(即 const char*类型)。

  • 在进行 printf 输出时,需要将 string 转换为 C 风格的字符串进行输出。

#include <bits/stdc++.h>
using namespace std;int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);char buf[100];	// 临时变量,用于输入scanf("%s", buf);	// 输入bufstring str(buf);	// 用buf来构造strprintf("str = %s\n", str.c_str());	// 输出strreturn 0; 
}
// 输入:Hello
// 输出:str = Hello

3.3 string基本操作

  • 获取字符串长度(length/size):
    str.length()
#include <bits/stdc++.h>
using namespace std;int main(){std::string str = "Hello, World";int length = str.length();	// 或者 int length = str.size();std::cout << "length:" << length << std::endl;return 0; 
} 
// 输出:length:12
  • 拼接字符串(+或者append)
    str1.append(", ").append(str2)
#include <bits/stdc++.h>
using namespace std;int main(){std::string str1 = "Hello";std::string str2 = "World";std::string result1 = str1 + ", " + str2;	// 使用 + 运算符std::string result2 = str1.append(", ").append(str2);	// 使用append()函数std::cout << "Result1:" << result1 << std::endl;std::cout << "Result2:" << result2 << std::endl; return 0; 
} 
// 输出:Result1:Hello, World
//		 Result2:Hello, World 
  • 字符串查找(find)
    str.find("World") 查找子字符串的位置
#include <bits/stdc++.h>
using namespace std;int main(){std::string str = "Hello,World";size_t pos = str.find("World");		// 查找子字符串的位置if(pos != std::string::npos){std::cout << "Substring found at position:" << pos << std::endl;} else{std::cout << "Substring not found." << std::endl;}return 0; 
} 
// 输出:Substring found at position:7
  • 字符串替换(replace)
    str.replace(7, 5, "Universe")
#include <bits/stdc++.h>
using namespace std;int main(){std::string str = "Hello,World";str.replace(7, 5, "Universe");	// 替换子字符串,replace(起始位置,长度,替换字符)std::cout << "Result:" << str << std::endl; return 0; 
} 
// 输出:Result:Hello,Universe
  • 提取子字符串(substr)
    subStr = str.substr(7, 5)
using namespace std;int main(){std::string str = "Hello, World";std::string subStr = str.substr(7, 5);	// 提取子字符串,substr(位置,长度),注意不要越界std::cout << "Substring:" << subStr << std::endl;return 0; 
} 
// 输出:Result:Substring:World
  • 字符串比较(compare)

    std::string 重载了 ==、<、> 等运算符,可直接按字典序比较,比 compare() 更简洁

str1.compare(str2)返回一个整数表示比较结果

#include <bits/stdc++.h>
using namespace std;int main(){std::string str1 = "Hello";std::string str2 = "World";int result = str1.compare(str2);	// 比较字符串if(result == 0){std::cout << "String are equal." << std::endl;}else if(result < 0){std::cout << "String 1 is less than String 2." << std::endl; }else {std::cout << "String 1 is greater than String 2." << std::endl;} return 0; 
} 
// 输出:String 1 is less than String 2.
  • 常用的遍历string的方法有两种:

    循环枚举下标

    auto枚举(其中&表示取引用类型,如果对i修改将会改变原来的值)

#include <bits/stdc++.h>
using namespace std;int main(){string s = "Hello";for (int i = 0;i < s.length(); ++i){cout << s[i];}cout << '\n';for(auto i : s){    //循环时,会把 s 里的每个字符(比如 s[0]、s[1])逐个复制到 i 里cout << i;i = 'a';	// 此处的修改无效,因为这个i是拷贝出来的,而不是引用s的 }cout << '\n';// 此时s = "Hello"for (auto i : s){cout << i;i = 'a';	// 此处修改会改变s的字符值 } cout << '\n';cout << s << '\n'; return 0; 
} 
// 输出:Hello
//		 Hello
//		 Hello
//		 Hello

3.3 字符串反转

  • reverse(s.begin(), s.end());(s为字符串)

reverse(s.begin(), s.end());是 C++ 标准库中的字符串 / 容器反转函数,核心作用是将字符串 s 的内容首尾颠倒。

#include <bits/stdc++.h>
using namespace std;
int main()
{string s;getline(cin, s);reverse(s.begin(), s.end());cout << s << '\n';return 0;
}
  • 倒序输出(字符串本身未改变)
#include <bits/stdc++.h>
using namespace std;int main()
{string s;getline(cin, s);for(int i = (int)s.length() - 1;i >= 0; --i){cout << s[i];}return 0;
}
  • 手动实现字符串反转的 “交换法”
#include <bits/stdc++.h>
using namespace std;int main()
{string s;getline(cin, s);for(int i = 0;i < s.length() / 2; ++i)swap(s[i], s[s.length() - i - 1]);cout << s << '\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/983381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Framework源码解析——AsyncConfigurer - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【日期计算】一个可以死算出来的题目/数学规律和死算你选一个就行了

死算出来了所有月份的范围,然后计算d和每个月份开始的差值就可以了: 闰年: The number 1 month is from 1 to 31 The number 2 month is from 32 to 59 The number 3 month is from 60 to 90 The number 4 month is…

提交BUG时的几点注意事项

1.标题:提交缺陷时,尽量保证Bug标题能够简明扼要地阐述问题本质,使查看人员能快速了解Bug内容。 2.发现Bug之后,可以先去抓包、监控日志、检查数据库,尝试分析定位Bug的产生原因(当然也要合理安排测试进度,避免…

Linux 进程资源占用分析指南 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

软件工程学习日志2025.12.1

学习主题 物料管控系统需求定义与结构化建模(功能结构图+完整数据流图设计与优化) 学习目标精准理解物料管控系统的业务范围、核心流程及各角色职责,掌握系统边界的界定方法。 熟练绘制符合结构化建模规范的功能结构…

计算机毕业设计springboot数字集成电路设计课程线上仿真实验平台的设计与实现 基于SpringBoot的数模混合IC线上实验教学平台开发 面向数字集成电路课程的云端虚拟实验环境构建 - 详解

计算机毕业设计springboot数字集成电路设计课程线上仿真实验平台的设计与实现 基于SpringBoot的数模混合IC线上实验教学平台开发 面向数字集成电路课程的云端虚拟实验环境构建 - 详解2025-12-01 19:44 tlnshuju 阅读…

12/1

春风桃李花开日,秋雨梧桐叶落时

租房买房必看5这种“恶山”格局,让你努力工作也存不住钱,背后小人不断!

5 这种“恶山”格局,让你努力工作也存不住钱,背后小人不断! 大家好,我是风水程序猿。 今天我们不谈代码,来聊聊买房的“底层架构”——你家的靠山。 很多朋友买房只贪图“环境幽美、空气好”,看到依山而建就觉得…

python笔记-条件判断

1、单分支条件判断:ifif 语句语法 if 条件:#条件成立执行下级代码,条件不成立不执行下级代码 下级代码块 if语句流程图1if语句流程图22、双分支条件判断:if-else 完整语法 if 条件: 条件成立时,执行的下级代码 。…

AI自动视频剪辑的开源模型盘点

​1、FunClip 阿里的,2023年10月推出,2024年6月停止更新,它是先根据音频识别出文案,然后直接删除不需要的文案,相应视频内容就会被剪掉。 https://github.com/modelscope/FunClip?tab=readme-ov-file 这是应用示…

lxy_蓝桥杯C++学习_系列二:函数用法及String相关知识

一、函数的常见用法 1.1 无参数无返回值的函数点击查看代码 #include <iostream> using namespace std;void sayHello(){cout << "Hello,World!" << endl ; }int mmain(){sayHello();retu…

日总结 33

数据流图(DFD) 描述数据的流动、处理、存储逻辑 只关注 “数据”,不关注操作步骤 / 状态变化 状态图 描述对象 / 系统的状态变化及触发条件 核心是 “状态切换”,需标注触发事件 流程图 描述任务 / 流程的步骤顺序…

STM32 Cmake平台上对print进行串口重定向的方法

从keil转移到cmake上的朋友可能还不知道怎么进行串口重定向 因为不是keil有自带microlib库,没法继续套用。 我将通过下面的示例告诉大家,并避免踩到一些已有的坑。cmake框架由cubemx生成,如有提到路径就是生成目录下的…

Github 学生认证保姆级教程 - 狼人:

Github 学生认证保姆级教程2025-12-01 19:42 狼人:-) 阅读(0) 评论(0) 收藏 举报点击头像,再点击 profile点击 Edit Profile,编辑信息,点击 Save 保存点击 Settings点击 Password and authentication进入2FA验证…

【口碑好的/比较好的/靠谱的】螺杆挤出机公司/工厂/厂家推荐/排行榜 哪家好/强/靠谱

【口碑好的/比较好的/靠谱的】螺杆挤出机公司/工厂/厂家推荐/排行榜 哪家好/强/靠谱 在塑料改性、色母粒、功能母粒及高分子材料加工领域,螺杆挤出机扮演着至关重要的“心脏”角色。一台性能卓越、运行稳定的挤出设备…

liunx材料及目录管理和vim编辑

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025/12/1

人机交互作业C/S结构设计 昨天肝这个作业肝到凌晨2点,所以没发有关博客就睡了,今天来补上。 C/S结构用户界面设计 【实验编号】 10003809547j   图形用户界面设计 【实验学时】 8学时 【实验环境】 l 所需硬件环境…

Codeforces Div2 2025.11.28

C. Quotient and Remainder 题目大意: 有两个长度为 \(n\) 的数组 \(q\), \(r\), 给定一个 \(k\),选择两个数 \(x,y\) 满足 \(1\leq y\le x\leq k\),其中在 \(q\) 中删除 \(q_i=x/y\),在 \(r\) 中删除 \(r_j=x\%y…