重读《C primer plus》(十一)
文章目录
- 一、表示字符串和字符串I/O
- 1.在程序中定义字符串
- 1.字符串字面量(字符串常量)
- 2.字符串数组和初始化
- 3.数组和指针
- 二、字符串输入
- 三、字符串输出
- 四、自定义输出/输入函数
- 五、字符串函数
- 六、选择排序算法
- 八、命令行参数
- 九、把字符串转换为数字
一、表示字符串和字符串I/O
1.在程序中定义字符串
1.字符串字面量(字符串常量)
用双引号括起来的内容称为字符串常量。
2.字符串数组和初始化
c99之后有着变长数组的概念,即char crumbs[n];
3.数组和指针
- 联系:1.两者都可以使用数组表示法。2. 两者都可以进行指针加法操作
- 区别:假设有下面两个声明:
char heart[] = "I love you!";
const char *head = "I love you!";
1.只有指针表示法可以进行递增操作。2.可以这样head = heart;,但是不能heart = head;。3.初始化数组把静态存储区的字符串拷贝在数组中,而初始化指针只把字符串的地址拷贝到指针。
二、字符串输入
- gets()函数
有着安全隐患,已经逐渐要被淘汰掉 - fgets()函数
会保留输入末尾的换行符作为字符串的一部分,要编写额外的代码,来将换行符替换成空字符。 - gets_s()函数
只从标准输入中读取字符,所以不需要第3个参数,如果读到换行符会将其丢弃,而不是存储。
鉴于此,fgets()通常是处理类似情况的最佳选择。 - scanf()函数
scanf()和gets()类似,也存在一些潜在的缺点。如果输入行的内容过长的话,scanf()也会导致数据溢出。不过,在%s转换说明中使用字段宽度可防止溢出。
三、字符串输出
- puts()函数
该函数遇到空字符时就停止输出,所以必须确保有空字符。 - fputs()函数
要注意puts()和gets()配套使用,fputs()和fgrts()配套使用。 - printf()函数
形式更为复杂,计算机执行时间也更长
四、自定义输出/输入函数
可以自定义一个满足自己需求的函数。
//put1.c
#include<stdio.h>
void put1(const char * string){while(*string != '0')putchar(*string++);
}
五、字符串函数
- strlen()函数:strlen()函数用于统计字符串的长度。
- strcat()函数:用于拼接两个字符串
- strncat()函数:该函数的第三个参数指定了最大添加字符数。如strncat(bugs,addon,13)
- strcmp()函数:用于字符串比较,其返回值有正、负和0,取决于字符串在ASCLL中的位置。
- strncmp()函数:可以只比较第三个参数指定的字符数。
- strcpy()函数:拷贝字符串
- strncpy()函数:第三个参数指定可拷贝的最大字符数。
- sprintf()函数:此函数声明在stdio.h中,而不是string.h
六、选择排序算法
利用选择排序算法来排序指针,具体做法是利用for循环依次把每个元素与首元素比较。如果待比较的元素在当前首元素的前面,则交换两者。重复这一过程直到倒数第二个元素为止。现在只剩下两个元素比较这两个元素,将较大的元素放在倒数第二的位置。这样,数组中最小元素就出现在最后的位置上。
八、命令行参数
- DOS或者UNIX都是使用命令行编译程序,因此在同一行中可以自己加参数。
- 集中开发环境中(IDE),可以使用可运行命令行的编译器,如GCC之类。
九、把字符串转换为数字
需要用的函数:
atoi();
strtol();
重读《C primer plus》(十一)相关推荐
- C++primer第十一章 关联容器 11.3关联容器操作 11.4 无序容器
11.3关联容器操作 除了表9.2(第295页)中列出的类型,关联容器还定义了表11.3中列出的类型.这些类型表示容器关键字和值的类型. 对于set类型,key_type和value type是一样的 ...
- C++primer第十一章 关联容器 11.1使用关联容器 11.2 关联容器概述
关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的.与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的. 虽然关联容器的很多行为与顺序容器相同,但其不同之处反映 ...
- C++Primer第五版——习题答案+详解(完整版)
C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...
- C++ Primer读书摘要(二)
C++ Primer 第八章 标准IO库 学习本章内容之前有必要对缓冲区的概念做一个基本了解,我引用了网上一片文章<C++编程对缓冲区的理解>,内容如下: 什么是缓冲区 缓冲区又称为 ...
- C primer plus(第六版)第十一章源代码
C primer plus(第六版)第十一章源代码 /* 11.1 */ #include<stdio.h> #define MSG "I am a symbolic strin ...
- 【c++primer第五版】第十一章习题答案
第十一章 关联容器 练习11.1 描述map和vector的不同. 解: 顺序容器中的元素是"顺序"存储的,对于vector,元素在其中按顺序存储,每个元素都有唯一对应 的位置编号 ...
- C Primer+Plus(十一)
第11章 字符串和字符串函数 11.1字符串表示和字符串I/O 11.1.1在程序中定义字符串 字符串定义: char s[10]="iamaboy!";//这是字符串 char ...
- C++ Primer Plus(十一)—— 使用类
为什么80%的码农都做不了架构师?>>> 不要返回指向局部变量或临时对象的引用,函数执行完毕后,局部变量和临时对象都将消失,引用将指向不存在的数据. C++对用户定义的运算符重 ...
- 记录——《C Primer Plus (第五版)》第十一章编程练习第5-12题
5.编写一个函数is_within(),它接受两个参数,一个是字符,另一个是字符串指针.其功能是如果字符在字符串中,就返回一个非0值(真):如果字符不在字符串中,就返回0值(假).在一个使用循环语句为 ...
最新文章
- FPGA基础知识极简教程(3)从FIFO设计讲起之同步FIFO篇
- markdown测试
- python 加速循环的执行_python循环怎么用多线程去运行
- mysql保存中文乱码的原因和解决办法
- php连接mysql的区别吗_php连接mysql之mysql_connect()与mysqli_connect()的区别
- Turing equation
- 【今日CS 视觉论文速览】 25 Jan 2019
- 使用trace_event跟踪进程的一生
- CSS基础之清除浮动
- android - 调用系统分享功能分享图片
- Japan树状数组求逆序数
- 5. 学习集合与常用类
- 1、pthon中类包含的方法
- POJ2653 Pick-up sticks
- pr双击打开图标没反应,下载ZXPSignLib-minimal.dll替换
- Windows 禁用U盘
- python中np是什么意思_了解python中np是做什么的
- IT从业者创业公司生存指南:创业初期 ---- 指点江山,激扬文字,粪土当年万户侯
- 孩子为什么不能玩抖音精彩回答,共勉
- 计算机任务管理器不能打开,电脑任务管理器无法打开怎么办
热门文章
- php 变量作用域local,PHP 变量的四大作用域
- 浪潮服务器 虚拟光驱,浪潮英信服务器NF5280M5
- 计蒜客第六场 微软大楼设计方案(困难)
- 在Ubuntu18.04中安装wps并且解决文字字体缺失的问题
- [蓝桥杯训练] 第八届(2017)省赛 C/C++ A组 T01 - 迷宫
- 数据结构最小堆C++实现
- 【PMP】收尾阶段的习题
- 通达信年涨幅主图指标
- 简化操作教会你如何使用接口,利用关键词搜索技术获取1688的商品数据
- element ui tree增删改查_clientgo连接K8s集群进行pod的增删改查