一、算法优化:

  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)清除缓存

  • 加密框架:

最新文章

  1. Asp.Net MVC中使用StreamReader读取“Post body”之应用场景。
  2. git 命令总结
  3. bootstrap之CDN
  4. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试
  5. X64下MmIsAddressValid的逆向及内存寻址解析
  6. nginx 相关问题
  7. 如何获取内联样式的width值
  8. ytu 2002:C语言实验——单词统计(水题)
  9. 《数据通信与网络》笔记--TCP中的拥塞控制
  10. StringHelpers
  11. ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏
  12. mpich2 下运行时出现“由于目标计算机积极拒绝,无法连接”的错误
  13. Spring boot 之自动生成API文档swagger2
  14. 【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
  15. 3D中的旋转变换
  16. zabbix3.x自动发现主机
  17. Hadoop2.7.6_03_HDFS原理
  18. Unity3D Shader 高斯模糊
  19. python------面向对象介绍之多态实例
  20. 多线程(Java)

热门文章

  1. &lt;三&gt;使用类模板实现STL Vector
  2. 基于echarts的带流动光效的折线图-lowline-for-echarts使用记录
  3. SerialException:Cannot configure port something went wrong
  4. 14 STL-常用算法
  5. 01-复杂度2 Maximum Subsequence Sum (25分)
  6. kestrel网络编程--开发redis服务器
  7. frp内网穿透(已验证)
  8. hyperf 配置 https 访问
  9. 速记&#183;python 123章
  10. java8新特性学习笔记