C/C++相关概念和易错知识点(12)(字符数组的修改、sscanf、sprintf)

C语言学习——sprintf函数详细解释及其用法 sprintf 指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,…]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以... 阅读详情

字符数组是一个很细节的语法,涉及很多知识点,这篇文章我主要分享一下如何理解字符数组,以及对应的sscanf、sprintf有什么用

1.字符数组的初始化以及内容修改易错点

字符数组的初始化方式有两种,一种是直接用字符串进行初始化,另一种是大括号加上字符或字符串进行初始化

8b82c40a3d2f40aeba75c57c6dfbf247.png

这两种初始化方式均可,但是如果我现在想要更改数组的内容呢,那应该怎样操作?

很多人会第一时间想到直接给arr赋上一个新的字符串,但这显然是不行的。

55eaaeef02944073b5799eb7a3be0d27.png

接下来分析原因:

a.数组名的理解:我们都常说数组名是首元素地址,但这并不准确,因为arr本质上并不能算作一个指针,有一个典型的错误理解是:arr是一个指针,编译器为arr这个指针变量独立开辟一块空间,并赋值为首元素地址。

但事实上,arr并不是我们传统意义理解上的变量,它更像是一种标签,在不同的时候有不同的意义。在大多数情况下,它表现出来的特性都类似于指针,这也是我们为什么常说arr是首元素地址。但其实arr不是指针,编译器没有为arr单独分配空间,这也是它不能完全等于指针的本质原因。

当我们写出char* p = arr时,看似能证明arr是一个指针,但其实这只是arr在这里表现出了指针的特性,拥有指针一样的用法,实际上是将arr数组的首元素的地址直接赋给p,并没有通过arr这个单独的指针来赋值,准确来说arr只是一个标签。

而对应的&arr标志的就是取出整个数组的地址。不是我们传统理解的对arr这个指针变量取地址。

这一点非常细节,需要每个人特别注意!

后面我所说的“arr这个指针”实际上是帮助我们理解语法,因为arr很多时候确实会表现出指针一样的特性,但是要明白它的实质并不是传统的变量,要明白它只是一个标签。

62316d19a20a4dc5be0a82d68e46bdbd.png

arr这个指针还有个常属性,即arr存储的值不能被修改,类似于const int* p,这就导致arr的指向的空间区域在一开始就确定了,不能被修改了。

b.表达式的返回值:我们还要清楚表达式的返回值是存储在一个临时变量里的,这个临时变量同样具有常属性,这个临时变量我们是看不到的,如果有变量接收就把这个临时变量的值赋给这个变量。如果学过C++的引用,那么我们对这个临时变量的印象就会很深刻。

在字符数组的两种初始化表达式语句中,"Hello"返回的值是字符'H'的首元素地址,{'Hell", 'o'}返回的也是括号内第一个字符'H'的地址。更详细一点,就是这些初始化表达式的值(地址)存到一个临时变量里,再把临时变量里的这个地址赋给arr这个指针,完成初始化。

后续对字符串的访问其实就是靠的这个返回的地址的。

下面看一种情况:

8a88f02b8c38425db14edcfef4a9233e.png

这种情况也同理,只有在定义的时候,在arr这个指针还没有明确指向哪一块空间的时候,我们可以对它初始化,但如果不初始化,那么编译器会自动分配一块空间并把这块空间的最低地址赋给指针arr,这个时候arr就再也无法进行修改了。在上面这张图中,我们可以看到如果我们想要将"Hello"存到数组,直接赋值操作是不行的,因为就像上面所说的,arr = "Hello";本质是修改arr这个指针存储的值,这是绝对不允许的。我们明显需要其它方法来实现这种操作,达到在这块指定的空间里修改值的操作。

2.为什么字符数组会遇到这种情况

其实arr具有的常属性适用于所有的数组,一旦数组被定义了,首元素的地址是一定不能变的。

至于在int、float、double等类型的数组我们很少遇到这个情况,是因为几乎没有人会写出下面的代码:

b224a25c1569403eb3fd6de541433058.png

一般而言,我们都会针对arr[0]这种写法来修改数组里面的值,这其实就相当于在指定空间里面修改值的操作,而不是直接去修改arr指向的空间。

但是字符数组里面存储的信息大多是连续的,如一个单词,一个句子,我们需要批量修改字符数组里面的值,单个字符修改太慢,且又不能使用循环来解决,因此我们才会容易犯上面的错误。而这个需求在其它类型的数组里面遇到的情况相对较少,通常都是针对某个数据进行修改,如果是批量修改,写很容易通过循环来解决。

3.字符串或内存函数解决方案

有以下几种函数可以帮助我们批量修改字符串中的值,它们都是直接到对应内存区域里修改值实现的。

(1)strcpy

标准格式:char * strcpy ( char * destination, const char * source )

(2)strcat

标准格式:char * strcat ( char * destination, const char * source );

(3)memcpy

标准格式:void * memcpy
 ( void * destination, const void * source, size_t num );

(4)memmove 

标准格式:void * memmove ( void * destination, const void * source, size_t num );

其中内存函数的第三个参数是拷贝的字节,一般情况推荐用memmove 

4.sscanf和sprintf

上面的字符串函数和内存函数已经可以实现我们全部的需求,但是仍然不方便,这个时候就可以考虑sprintf。

sprintf就是将我们想要输入的任何数据直接存入字符数组中。

ba51f418545e4bf5ae7c6c2c6daebb1a.png

我们把数组的地址传过去,函数就能自动找到对应的区域并将这块区域的数据进行修改。

这非常方便,同时这个函数也可以使用占位符,和printf一致。

57f96d03636e49d4ba260de389ebd413.png

sscanf也是对字符数组内的数据进行操作,和scanf的功能类似。但是scanf是需要我们从屏幕中输入数据,再进行读取。而sscanf是直接在字符串中对数据进行读取。读取的规则和scanf一致。

d15f0aa5d73f4078a5c8f091f506a9b4.png

字符串处理函数:sscanf 的用法 一直对于一些日期字符串中数字的提取比较头疼,现看到 sscanf 对于字符串中的内容提取较方便,学习记录如下。方便以后查询。 阅读详情

相关推荐

C语言全网最全sscanf函数用法,没有的评论区提,随时更新

本教程分初级、进阶、实战用例,有基础的直接跳到后面吧。本文主要拿AT指令做例子。写得不好别喷,合理的要求可以提出来我尽力改。本教程应该足以面对大部分的解析。最后部分主要是实战为主。各位有想解析的字符串可以放到评论区,比较经典的我会放到文章里。

Troubadour~的博客 1万+

sprintf函数用法详解

sprintf指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,…]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制。 函数声明 int sprintf(char *st

weixin_46571142的博客 12万+

深入理解 sscanf 和 sprintf:C/C++ 中的强大字符串处理函数

sscanfsprintfsscanf和sprintf是 C/C++ 中经典的字符串处理函数,提供了强大的格式化输入和输出功能。尽管它们不具备现代 C++ 中的类型安全和边界检查等优势,但在处理固定格式的字符串时,依然有其不可替代的灵活性和高效性。在现代 C++ 编程中,除非需要非常复杂的格式处理或需要与旧代码兼容,否则更推荐使用 C++11 引入的标准库函数,如std::stod和,来替代sscanf和sprintf。这样可以提高代码的可读性和安全性。

2202_75569688的博客 2517

C 语言字符串格式化利器:sprintf 与 snprintf 解析

本文解析sprintf与snprintf的功能、区别及使用要点。sprintf无长度限制,存在溢出风险,适用于固定格式场景;snprintf通过size参数限制长度,返回值可判断截断,安全性更高,适合动态数据处理。实际开发中应优先使用snprintf,并严格匹配格式符与参数类型,避免溢出和未定义行为。

byte轻骑兵的技术小窝 14万+

深入解析C/C++中sscanf与sprintf:安全实践与现代替代方案

在C和C++编程中,字符串格式化与解析是基础且关键的操作,涉及数据转换、协议处理与日志生成等核心场景。其原理基于格式字符串这一微型领域特定语言,通过指定类型、宽度等指令,控制数据在内存缓冲区与字符串表示间的转换。这项技术的价值在于能以单行代码完成复杂的数据组装与提取,在遗留系统、嵌入式开发及高性能解析中仍有广泛应用。然而,其传统实现存在缓冲区溢出等安全风险,需通过宽度限制、返回值检查等工程实践进行防护。现代C++提供了如std::stringstream、std::format等更安全、类型友好的替代方案,

weixin_33326218的博客 303

C/C++字符输入函数(详解)

文章目录C/C++字符输入函数(详解)1.常用函数(scanf函数)2.cin流控输入3. gets()函数4.getline()函数5.cin.get (char *str, int maxnum)特殊输入函数1> sprintf():2> sscanf():上章题解:问题:通过灵活输入原字符串,需要替换的字符换,需要被替换的字符串,并输出结果。 C/C++字符输入函数(详解) C/C++实现从终端(包括但不限于键盘,对于嵌入式设备可以是网口/串口)。 C/C++所提供的标准库提供了不下于一

MelyLenient的博客 5142

C/C++ | 关于sscanf以及sprintf函数

sscanf、sprintf简介 sscanf以及sprintf是处理字符串问题的利器,熟练的掌握这两个函数可以在一些算法竞赛中取得一定的优势。首先,sscanf在单词上可以理解为string scanf,sprintf则可以理解为string printf。 现在,我们再来看看scanf以及printf。 如果我们要在屏幕上输入一个int型变量n,并且将int型变量n输出到屏幕上,则可以这样表示...

qq_44888152的博客 1661

ADS8681数据手册没讲透的细节:SPI时序、量程切换与电压换算的避坑指南

本文深入解析ADS8681数据手册未提及的SPI时序优化、量程切换陷阱与电压校准技巧。针对树莓派5与ADS8681的SPI通信问题,提供CPOL/CPHA配置建议;详解量程切换的位操作玄机与寄存器配置流程;并提出三步校准法应对非理想供电环境,帮助开发者提升ADC测量精度。

weixin_29178069的博客 519

【C/C++】sprintf 和 sscanf 函数详解

介绍sprintf和sscanf函数的使用

hallo的博客 694

KEIL MDK实战:如何用fromelf工具解析STM32的ELF文件结构(附完整命令行)

本文详细介绍了如何使用KEIL MDK中的fromelf工具解析STM32的ELF文件结构,包括内存段分析、符号表追踪和反汇编关键函数等实战技巧。通过完整的命令行示例,帮助嵌入式开发者优化内存占用、排查运行时问题,并提升STM32项目的开发效率。

weixin_42631411的博客 187

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 325

sscanf和sprintf用法讲解

\quadsscanf主要用于把字符串重新输入到指定类型的变量中,而sprintf则是将指定类型的变量转化为字符串。用法示例如下,主要用于oj刷题。 #include <bits/stdc++.h> using namespace std; int main(int argc, char const *argv[]) { float f1; int f2; string s =...

qq_40438165的博客 1762

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1107

字符串序列化神器《sscanf》《sprintf》的使用 C++11《to_string》

sprint 头文件:#include<stdlib.h> C 库函数 int sprintf(char *string, char *format [,argument,…]); 用途: 该函数可以将不同类型的多个数据序列化的写入一个字符串buff中,比起strcat(连接两个字符串)函数将会是更加的方便快捷。 返回值 int : 该函数的返回值为int,写入成功时,返回的是写入的b...

lovehang99的博客 964

LCD、LED、OLED、Mini LED、Micro LED、全阵列LED、QLED、QD-OLED、QNED、AMOLED是什么意思?

LCD(液晶显示器,Liquid Crystal Display)定义:LCD 是一种利用液晶材料控制光线通过的显示技术,需依靠背光源(如冷阴极荧光灯 CCFL 或 LED)照亮液晶层以形成图像。技术原理:液晶分子在电场作用下改变排列,控制背光通过的强度和颜色。液晶本身不发光,需外部光源。特点:结构包括背光层、液晶层、彩色滤光片和偏光片。响应时间较慢,黑色表现因背光漏光而偏灰。LED(发光二极管显示,Light Emitting Diode)定义。

中国最威武的城市!武功军威-武威,铁骨铮铮! 3424

【unity实战】Unity2D TileMap的探究(最简单,最全面的TileMap使用介绍)

之前有人在微信上找我,问了TileMap相关的知识【unity实战】随机地下城生成2——绘制地图Tilemap的使用及一些技巧的使用(含源码)不过写的不是特别不是特别细致,只是简单的用了一下,所有这次特地打算单独写一篇文章,来介绍一下,下次还有人问我,我直接就把这篇文章丢给他,完美!Unity的Tilemap 一般称之为瓦片地图或者平铺地图,是 Unity2017 中新增的功能,主要用于快速编辑 2D 游戏中的场景,通过复用资源的形式提升地图多样性。Tilemap是一个用于创建2D地图的工具。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

sscanf,sprintf,snprintf和stringstream用法

sscanf C 库函数,int sscanf(const char *str, const char *format, …) 从字符串读取格式化输入。如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。和scanf的区别是scanf是以键盘作为输入源,sscanf是以字符串作为输入源。 str:这是c字符串,是函数检索数据的源 format:这是 C 字符串...

so_vegetable的博客 560

uniapp - 解决报错 canvasToTempFilePath: fail canvas is empty 画布为空错误,生成海报相册、二维码、条码、裁剪/拼合操作图片报错,加了this还是报错

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,canvasToTempFilePath:失败画布为空,报错,canvasToTempFilePath:failcanvasisempty,不支持2d,还是报错,this,加上this还是报错,vue3没有this怎么办?海报,保存到手机相册,生成二维码,显示条码,图像裁切,图片处理,canvas报错,无法解决,还是fail,依然报错,传了this也不好使,Uniapp小程序,如何解决这个问题

🏆 前端领域优质创作者 4706

sscanf和sprintf用法

sscanf用法 sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。 1、读取指定长度的字符串 #include<stdio.h> #include<string.h> int main() { char str[100]; sscanf("12345","%4s",str); printf("%s\n",s...

qq_43557445的博客 291

2024 全国大学生新质生产力大赛 B:金融违规交易的大数据分析 问题四思路代码

问题四:请分析附件中所有的指标数据,选取合适的指标,建立“金融违规 洗钱交易的预测模型”,并选取合适的训练集和测试集,计算预测模型的准确率。 为了提前识别并预测金融违规洗钱的交易事件,请基于你们团队数据分析的结果, 分别给公安部门和银行机构提出你们的建议。

YOLO 375

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

sscanf和sprintf的用法

ABOUTSSCANF/SPRINTF 目录: SPRINTF……………………………………………………………………………………… SSCANF…………………………………………………………………………………….... 一、SPRINTF (sprint(字符数组,格式,字符串常量);) 1.       可以将变量打印到字符串里,获取数字的字符形式 程序: #include #i

inWTer的专栏 783

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C/C++常用输入输出函数总结

文章目录输入函数(gets、scanf、getline、cin)gets函数fgets函数 输入函数(gets、scanf、getline、cin) gets函数 C11中已经抛弃该函数,不推荐使用。 调用格式 char str[100]; gets(s); 说明 gets()从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,使用'\0'(C语言字符串结束标志)结......

Accept1234的博客 3279

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C/C++字符串和数字的相互转换

平时有可能会用到将int的1转换为string的"1"的题型,下面对C/C++字符串和数字的相互转换进行整理: int、long 和 double 等类型,有时也需要转换为字符串形式,这样结果字符串才能立即输出到文件或其他输入输出设备,或者存入内存中的某个字符串对象,供以后使用。 1.字符串类型 数字转字符串: to_string()函数是C++ 11 提供了若干 to_string...

分享包括但不限于计算机基础知识、数据结构与算法、Golang技术栈。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 4581

C/C++一些函数的用法

有一些函数我经常会忘记它们的用法,记录一下 memset memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。 函数介绍: void *memset(void *s, int ch, size_t n); 函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch...

默的博客 1364

c语言sprintf_算法笔记|(6)第二章C、C++的快速入门strcpy(),strcat(),sscanf,sprintf

3.strcpy()该函数可以将一个字符串复制给另外一个字符串strcpy(字符数组1,字符数组2);是把字符数组2复制给字符数组1,这里的复制包括了结束符\0```c#include#includeint main(){ char str1[50],str2[50]; gets(str1); gets(str2); strcpy(str1,str2); puts(str1); retu...

weixin_39682673的博客 166

《算法笔记》笔记 - sscanf和sprintf的简单用法

假设已有如下定义 char str[100]; int n; 则sscanf和sprintf的用法为: sscanf(str,"%d",&n); sprintf(str,"%d",n); sscanf的表示将str中的内容以"%d"的格式写入到n中。 sprintf的表示将n中的内容以"%d"的格式写入到str字符数组中。 其他的(比如输入时候和输出时候的格式控制方面)与scanf和printf基本无异。 ...

Bi9R!ver的博客 711
上一篇: C/C++相关概念和易错知识点(24)(构造函数、析构函数)
下一篇: C/C++相关概念和易错知识点(25)(析构函数、拷贝构造、运算符重载、赋值重载)
-SGlow-
博客等级 码龄3年 1513粉丝 118原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值