C++015-C++函数

news2024/10/5 13:42:38

文章目录

  • C++015-C++函数
    • 函数
      • 目标
      • char[]和string
        • char[]
        • char*
        • string
      • 字符常量与字符串常量
      • 字符串的输入
      • 题目描述 字符串输出
      • 题目描述
    • 在线练习:
    • 总结

C++015-C++函数

在这里插入图片描述

在线练习:
http://noi.openjudge.cn/
https://www.luogu.com.cn/

函数

目标

函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中,面向对象程序设计Object Oriented Programming)方法。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。

char[]和string

先阐述C++中char[],string的区别和联系.

char[]

#include <iostream>
using namespace std;
int main()
{
    char a[10] = "123";
    a[4]='5';
    a[3]='4';
    cout << a;
    return 0;
}
// 输出:12345,此程序在a[5]的位置自动写入了'\0',终止符

在这里插入图片描述

注意:这里的char [] 数组,
如果是全局变量,静态变量,一般编译器(具体要依赖于具体所使用的编译器和系统)会采用默认原则将内部的所有位置设置为0;
如果是局部变量,由于局部变量的内存分配是在栈上,如果未对char数组进行初始化的话,数组内的数据取决于此处原来的数据。同理,动态变量在堆上,同样数据为任意值。

char*

参考:https://blog.csdn.net/weixin_42322256/article/details/121450646
1、字符串char*

char *str1="abcde";  //这是一个字符串常量,存储在静态存储区,是只读的。
const char *str1 = "abcde";
char const *str1 = "abcde"; //注意,这两种写法等价
//其中,str1是一个变量,代表的意思就是字符串的第一个字符的值

案例

#include <iostream>
using namespace std;
int main()
{
	char arr[] = "abcdef";
	char* pc2 = arr;   //数组首元素地址赋值给指针pc2,指针大小只有4字节不可能放下整个数组
	cout << *pc2 << endl;   //输出是a,说明pc2存放的只是数组首元素地址
	cout << pc2 << endl;    //abcdef ,表示从pc2指向的地址位置开始打印
	cout << arr << endl;    //abcdef
    return 0;
}

输出为:
在这里插入图片描述

此处参照此博客:

关于字符串常量&字符数组&字符常量:https://blog.csdn.net/wuwuku123/article/details/103575620

const char * 、char const * 、 char * const 三者的区别:https://blog.csdn.net/qq_40244176/article/details/80765975

string

char是一个字符类型 C++的内置类型,char *是字符指针;
而string是一个字符容器,是一个扩展的模版类。
(一)、先解释char*字符串和string对象的区别。

1、定义

string:string是C++STL当中的一个容器,对其进行了封装,所以操作起来非常方便。
char*:char*是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。

2、区别:

string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。
char*的内存管理由用户自己处理,很容易出现内存不足的问题。
当我们要存一个串,但是不知道其他需要多少内存时,用string来处理就最好不过了。
当你知道了存储的内存的时候,可以用char*,但是不如用string的好,用指针总会有隐患。

用string还可以使用各种成员函数来处理串的每一个字符,方便处理。
用char*处理串,就不如string的方便了,没有相应的函数来直接调用,而是要自己编写函数来完成串的处理,而且处理过程中用指针还很容易出现内存问题。

3、注意:

当我们定义了一个string,就不能用scanf(“%s”,s)和printf(“%s”,s)输入输出。主要是因为%s要求后面是对象的首地址。

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s1;//变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是"",也即空字符串。
    string s2 = "c plus plus";//变量 s2 在定义的同时被初始化为"c plus plus"。与C风格的字符串不同,string 的结尾没有结束标志'\0'。
    string s3 = s2;//变量 s3 在定义的时候直接用 s2 进行初始化,因此 s3 的内容也是"c plus plus"。
    string s4 (5, 's');//变量 s4 被初始化为由 5 个's'字符组成的字符串,也就是"sssss"。
    return 0;
}

从上面的代码可以看出,string 变量可以直接通过赋值操作符=进行赋值。string 变量也可以用C风格的字符串进行赋值,例如,s2 是用一个字符串常量进行初始化的,而 s3 则是通过 s2 变量进行初始化的。

字符常量与字符串常量

在这里插入图片描述

字符串的输入

1.cin>>字符串名;

string s1;//定义一个字符串变量s1
cin>>s1;//直接输入s1字符串

【注意】cin语句不会输入空格、换行符等分隔符(输入后,空格、换行符仍然留在输入缓冲区);

  1. getline(cin,字符串名);
string s1;
getline(cin,s1);//获取一行;

题目描述 字符串输出

【描述】
输入两个单词,用空格隔开,然后分两行分别输出这两个单词
【输入】
1行,两个单词,用空格分隔;
【输出】
2行,两个单词,每个单词一行;

#include <iostream>
#include <string>
using namespace std;

int main(){
    string s1,s2;
    cin>>s1>>s2;
    cout<<s1<<endl<<s2;
    return 0;
}

在这里插入图片描述

题目描述

【描述】
输入一个数字,这个数字可能是1也可能是2,然后分两行输入两个英文语句。如果是1就输出第一个句子,如果是2就输出第二个句子
【输入】
3行;第1行是一个数字;接下来的两行是2句英文句子。注意,句子中会存在空格,以换行符结束;
【输出】
1行,1个句子;
【样例输入】
1
l am a student.
My name is Hanmeimei.
【样例输出】
l am a student.

代码

#include <iostream>
#include <string>
using namespace std;

int main(){
    int n;
    string s1,s2;
    cin>>n;
    getline(cin,s1);
    getline(cin,s1);
    getline(cin,s2);
    if(n==1) cout<<s1;
    else cout<<s2;
    return 0;
}

在这里插入图片描述

在线练习:

http://noi.openjudge.cn/

总结

本系列为C++学习系列,会介绍C++基础语法,基础算法与数据结构的相关内容。本文为C++函数案例,包括相关案例练习。

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

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

相关文章

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

SVG实例详解系列&#xff08;一&#xff09; (svg概述、位图和矢量图区别&#xff08;图解&#xff09;、SVG应用实例&#xff09; 目录 一、什么是SVG? &#xff08;1&#xff09;、位图和矢量图概念&#xff08;图解&#xff09; &#xff08;2&#xff09;、SVG的小例子…

Flutter入门进阶之旅 -开源Flutter项目

开源Flutter项目 该项目为纯flutter端项目&#xff0c;采用aar方式寄生在原生APP中&#xff0c;作为APP中的一个独立模块 在业务逻辑上做到与原生APP完全隔离&#xff0c;Flutter端开发者&#xff0c;可完全不用关注原生端的业务模块 两端开发彼此业务隔离&#xff0c;缩小了对…

数字IC手撕代码--小米科技(除法器设计)

前言&#xff1a; 本专栏旨在记录高频笔面试手撕代码题&#xff0c;以备数字前端秋招&#xff0c;本专栏所有文章提供原理分析、代码及波形&#xff0c;所有代码均经过本人验证。目录如下&#xff1a;1.数字IC手撕代码-分频器&#xff08;任意偶数分频&#xff09;2.数字IC手撕…

wondows10系统python2.7兼容安装python3.10

假设已安装好python2.7和pyhon3.10。 python命令只需要应用程序改名即可&#xff0c;需要修改的有python.exe和pythonw.exe pip命令麻烦点&#xff0c;需要用改名后的程序名 重新安装&#xff0c;命令如下&#xff1a; python3 -m pip install --upgrade pip --force-reinst…

说说 Pluma 插件管理框架

1. 概述 Pluma 是一个用 C 开发的可用于管理插件的开源架构&#xff0c;其官网地址为&#xff1a;http://pluma-framework.sourceforge.net/。该架构是个轻量级架构&#xff0c;非常易于理解。 Pluma 架构有以下基本概念&#xff1a; 1&#xff09;插件的外在行为体现为一个…

【C++的OpenCV】第七课-OpenCV图像常用操作(四):图像形态学-图像侵蚀和扩散的原理

让我们来深化前边学习的内容前言一、图像形态学是什么&#xff1f;二、侵蚀和扩张的原理2.1 图像的侵蚀2.1.1 概念2.1.2 原理解释2.2 图像的扩张2.2.1 概念2.2.2 原理解释相关链接&#xff1a;【C的OpenCV】第六课-OpenCV图像常用操作&#xff08;三&#xff09;&#xff1a;Op…

RK3568镜像的拆包和打包

文章目录 前言一、window上分包和打包分包打包二、Linux上分包和打包分包打包总结前言 本文记录在win10上利用瑞芯微提供的工具进行分包和打包,同样也有Linux教程 提示:以下是本篇文章正文内容,下面案例可供参考 一、window上分包和打包 分包 window下一般直接利用工具即…

【正点原子FPGA连载】 第十八章基于BRAM的PS和PL的数据交互 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十八章基于BRA…

在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理

大家好&#xff0c;我是 17。 Flutter WebView 一共写了四篇文章 在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理在 Flutter 中使用 webview_flutter 4.0 | js 交互Flutter WebView 性能优化&#xff0c;让 h5 像原生页面一样优秀&#xff0c;已入选 掘金一周 …

AI绘画进军三次元,有人用它打造赛博女友?(diffusion)

目录0 写在前面1 AI绘画技术飞跃2 效果展示3 环境配置3.1 下载基础模型3.2 更新.NET和模型3.3 下载绘画模型3.4 启动项目3.5 标签配置4 结语0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&a…

内存数据库-4-[redis]在ubuntu中离线安装

Ubuntu20.04(linux)离线安装redis 官网redis下载地址 下载安装包redis-6.0.9.tar.gz。 1 下载安装 (1)解压 sudo tar -xzvf redis-6.0.9.tar.gz -C /usr/local/ cd /usr/local/redis-6.0.9/(2)编译 sudo make(3)测试 sudo dpkg -i libtcl8.6_8.6.10dfsg-1_amd64.deb sudo d…

纯x86汇编实现的多线程操作系统实践 - 第七章 AP2的用户进程

AP2用户进程的代码为task2.asm。该用户进程将在界面上显示一个移动的弹球。一旦在界面上点击鼠标左键&#xff0c;弹球就会直接从鼠标点击处重新出现并继续移动。如何在界面上显示出一个持续移动的小球&#xff1f;计算小球将移动到的区域1->保留该区域中将被小球覆盖的点-&…

智慧物联网源码带手机端源码 物联网系统源码

在智慧工厂领域&#xff0c;智慧城市领域&#xff0c;都需要对设备进行监控。比如工厂需要对周围环境温度、湿度、气压、电压&#xff0c;灯的开关进行监控。这时候就需要物联网平台来进行管理。 推荐一个基于java开发的物联网平台&#xff0c;前端HTML带云组态、可接入视频监…

【华为OD机试模拟题】用 C++ 实现 - 网上商城优惠活动(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明网上商城优惠活动题目输入输出备注示例一输入输出说明输入说明输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才…

Android zygote进程启动流程

zygote启动过程中涉及到以下模块&#xff1a; app_processzygote USAPsocketFileDescriptor (FD) AndroidRuntimeAppRuntime &#xff08;定义于app_process模块&#xff0c;继承自AndroidRuntime。&#xff09; init进程启动zygote进程&#xff1a; #init.zygote32_64.rc s…

【华为OD机试模拟题】用 C++ 实现 - 统计匹配的二元组个数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明统计匹配的二元组个数题目输入输出描述示例一输入输出说明示例二输入输出说明备注Code使用说明 参加华为od机试,一定要注意不要完全背诵代码&

python读写hdfs文件的实用解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

Python学习笔记之环境搭建

Python学习笔记之环境搭建1. 下载Python2. Windows 安装最新Python3. Linux 安装最新PythonPython是一种编程语言&#xff0c;可以让您更快地工作并更有效地集成系统。 您可以学习使用Python&#xff0c;并立即看到生产力的提高和维护成本的降低。 Python是荷兰程序员吉多范罗苏…

使用 OpenCV 进行面部和眼睛检测

OpenCV是构建计算机视觉应用程序的强大工具。计算机视觉中最常见的任务之一是人脸检测&#xff0c;它涉及识别图像或视频中人脸的存在、位置和面部特征。在本文中&#xff0c;我们将学习如何使用 Haar 级联分类器检测图像中的人脸。先决条件在开始之前&#xff0c;你需要在计算…

Android打造万能的BannerView无限轮播图

效果图&#xff1a;工程目录图&#xff1a;BannerAdapter&#xff1a;banner轮播图的适配器&#xff0c;因为服务器返回的列表图片的url&#xff0c;显示的时候需要转成IamgeViw&#xff1b; BannerScroller&#xff1a;设置切换页面的持续时间&#xff1b; BannerView&…