一、算法优化:

  1. 减少分支优化

    // 求绝对值
    int MyAbs(int n)
    {
    if (n < 0)
    {
    n = ~n + 1;
    }
    return n;
    } // 优化
    int MyAbs(int n)
    {
    // 利用符号位优化 n 的符号位(最高位) n>=0 符号位为0 n < 0 时 符号位为1
    // 左移31位 n = 0x00000000 n = 0xffffffff
    int m = n >> 31; // if(n>=0) m=0 else m = 0xffffffff // 此时 m = 0(n为正数或0) 或 -1(n为负数)
    n = n ^ m; // if(n>=0) n=n^0=n else n^-1 = ~n
    return n - m;
    }
  2. 尽量避免浮点数运算

  3. A ? B : C,只有B和C为常量时,编译器才会进行优化,不然也会有分支

二、单个字符的输入输出函数

getchar()

  • 作用是从输入设备(如键盘)读取一个字符
  • 没有参数
  • 一次只能接收一个字符
  • 可以接收回车字符,而scanf()将回车作为数据的间隔符或结束符
  • 接收的字符可以不赋给任何变量

putchar()

  • 作用是将一个字符输出到输出设备(如显示器)
  • 可以输出字符型变量、整型变量、字符型常量以及控制字符和转义字符
  • 一次只能输出一个字符
  • 有的时候可能是宏(看编译版本和编译选项)

三、字符串的输入输出函数

puts()

  • 一次只能输出一个字符串
  • 可以输出转义字符
  • 输出字符串后自动换行

gets()

  • 作用是将一个字符串输入到字符数组中
  • scanf()函数一样,在读入一个字符串后,系统会自动在字符串后加上一个字符串结束标志'\0'
  • 只能一次输入一个字符串
  • 可以读入包含空格和TAB键的全部字符,直到遇到回车为止
  • 一旦使用就会有安全漏洞,因为没有限制输入长度的机会。且漏洞至少是个拒绝服务,重则可以执行代码

四、字符串的操作函数

strlen(字符串)

  • 作用是测试字符串实际长度的函数,其返回值是字符串中字符的个数(不包含'\0')

strcpy(字符数组1,字符串2)

  • 用于将字符串2复制到字符数组1中

  • 注意:字符数组1必须足够大,以便容纳字符串2的内容

    ​ 字符串2可以是字符数组名或者字符串常量

    ​ 当字符串2为字符数组名时,只复制第一个‘\0’前面的内容(含'\0'),其后内容不复制

strcat(字符数组1,字符串2)

  • 用于将字符串2的内容复制连接在字符数组1的后面,其返回值为字符数组1的地址
  • 字符数组1不能是字符串常量,并且足够大,以便可以继续容纳字符串2的内容
  • 连接前字符数组1的‘\0’将被字符串2覆盖,连接后生成的新的字符串的最后保留一个‘\0’

strcmp(字符串1,字符串2)

  • 作用是比较字符串1和字符串2.两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不同或者遇见'\0'为止
  • 如果全部字符都相同,则返回值为0。如果不相同,则返回两个字符串中第一个不相同的字符的ASCII码值的差,即串1大于串2时函数值为正,否则为负
  • 微软差异:大于返回1,小于返回-1,而C标准返回是两值之差。所以为了规避这个问题,比较使用>0与<0判断大于与小于,不用与1和-1比较

strlwr(字符串)

  • 作用将字符串中大写字母转换为小写字母
if(ch >= 'A' && ch <= 'Z')
{
ch = ch + 'a' - 'A';
}

strupr(字符串)

  • 作用将字符串中小写字母转换为大写字母
if(ch >= 'a' && ch <= 'z')
{
ch = ch + 'A' - 'a';
}

五、附加知识

  • 字符串不能直接使用赋值语句

  • 函数的设计原则:强内聚低耦合(责任清晰,资源不依赖)

  • 中国姓名用数组存储,内存至少分配32个字节

  • 如果大小写不敏感,可以将用户输入的统一转大写(小写),要比较的也统一转大写(小写),然后比较

  • scanf()缓存清除:低版本使用fflush()清除缓存,高版本不兼容,不过能使用rewind(stdin)清除缓存

  • 加密框架:

C-07\字符串的输入输出及常用操作函数的更多相关文章

  1. byte数据的常用操作函数[转发]

    /// <summary> /// 本类提供了对byte数据的常用操作函数 /// </summary> public class ByteUtil { ','A','B',' ...

  2. Kotlin——初级篇(八):关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...

  3. Kotlin——关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin——初级篇(三):数据类型详解这篇文章. 在 ...

  4. JavaScript之数组的常用操作函数

    js对数组的操作非常频繁,但是每次用到的时候都会被搞混,都需要去查相关API,感觉这样很浪费时间.为了加深印象,所以整理一下对数组的相关操作. 常用的函数 concat() 连接两个或更多的数组,并返 ...

  5. Python--set常用操作函数

    python提供了常用的数据结构,其中之一就是set,python中的set是不支持索引的.值不能重复.无需插入的容器. 简单记录下set常用的操作函数: 1.新建一个set: set("H ...

  6. python字符串 列表 元组 字典相关操作函数总结

    1.字符串操作函数 find 在字符串中查找子串,找到首次出现的位置,返回下标,找不到返回-1 rfind 从右边查找 join 连接字符串数组 replace 用指定内容替换指定内容,可以指定次数 ...

  7. Python自动化开发(三):循环次数控制、常用数据类型、字符串格式化、列表常用操作、列表的后续操作

    计数器的作用可以在死循环中,符合条件的情况下做自动退出中断 #!/usr/bin/env python # _*_ coding: utf-8 _*_ # @Time : 2017/3/14 11:2 ...

  8. JavaScript之字符串的常用操作函数

    字符串的操作在js中非常繁琐,但也非常重要.在使用过程中,也会经常忘记,今天就对这个进行一下整理. String 对象 String 对象用于处理文本(字符串). new String(s); // ...

  9. linux shell字符串内置的常用操作(获取长度、查找、替换)

    在编写shell程序时,经常会涉及到字符串相关操作.有许多命令语句,如awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号,能够达到相似效果,使用内部操作符会省略启动外部程序等时 ...

  10. JavaScript字符串常用操作函数之学习笔记

    字符串简介 使用英文单引号或双引号括起来,如:’Hello’,”World”,但是不能首尾的单引号和双引号必须一致,交错使用,如果要打印单引号或者双引号,可以使用转义字符\’(单引号),\”(双引号) ...

随机推荐

  1. 直播CDN调度技术关键挑战与架构设计

    作者:胡济麟 1.背景介绍 1.1 直播业务特点 互联网视频直播是一种消息媒介形态,提供时产时消的内容,经过多年,已经发展出秀场.游戏.电商.体育等多种业务形态.主要特点是:内容实时产生实时消费,对时 ...

  2. hwlog---api.go

    // Copyright(c) 2021. Huawei Technologies Co.,Ltd. All rights reserved.// Package hwlog provides the ...

  3. MongoDB - 索引知识

    索引简介 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录. 索引支持 MongoDB 查询的高效执行.如果没有索引,MongoDB 必须扫描集合中每一个文档,以选择与查询语句 ...

  4. CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了?

    前言 今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进. 自从今年 1月份发布 6.0 版本以来,已经过去了快1年的时间.在过去的将近1年 ...

  5. day25 前端

    https://www.dcloud.io/hbuilderx.html 下载HbuilderX,直接解压缩双击打开 html5 <!DOCTYPE html><!-- 文档类型,声 ...

  6. C++编程笔记(通信)(win32平台)

    目录 一.初始化网络库 二.socket套接字 2.1服务端 2.2客户端 三.发送.接收数据 3.1发送 3.2接收数据 四.自定义的结构体 4.1 发送端 4.2接收端 IPV6版本套接字的创建 ...

  7. 云原生架构(二)环境搭建(Mac上安装Docker+Kubernetes+Istio一条龙)

    一.背景 Istio 项目由 Google 和 IBM 的团队与 Lyft 的 Envoy 团队合作启动.它已经完全在 GitHub 上公开开发.目前已经是"Service Mesh服务网格 ...

  8. MassTransit 知多少 | 基于MassTransit Courier实现Saga 编排式分布式事务

    Saga 模式 Saga 最初出现在1987年Hector Garcaa-Molrna & Kenneth Salem发表的一篇名为<Sagas>的论文里.其核心思想是将长事务拆分 ...

  9. BOM与DOM之BOM操作

    目录 一:BOM与DOM操作 1.BOM与DOM操作 二:BOM操作 1.常用的Window方法: 2.案例实操 3.打开新窗口 4.关闭当前页面 三:window的子对象 1.navigator对象 ...

  10. 伙伴福利,100个项目彻底精通Java!【开源】

    为了帮助更多的小伙伴,快速成长进步,冲进大厂中厂,我分享了很多的项目哟,例如: java项目精品实战案例 | JavaSwing实战项目 但很多小伙伴,还觉得不够,好吧!今天就拿出压箱底的项目,给支持 ...