zoukankan      html  css  js  c++  java
  • ACM基础(一)

    比较大的数组应尽量声明在main函数外,否则程序可能无法运行。

    C语言的数组并不是“一等公民”,而是“受歧视”的。例如,数组不能够进行赋值操作: 在程序3-1中,如果声明的是“int a[maxn],b[maxn]”,是不能赋值b=a的。如果要从数组a复 制k个元素到数组b,可以这样做:memcpy(b,a,sizeof(int)*k)。当然,如果数组a和b 都是浮点型的,复制时要写成“memcpy(b,a,sizeof(double)*k)”。

    另外需要注意的是, 使用memcpy函数要包含头文件string.h。如果需要把数组a全部复制到数组b中,可以写得简单 一些:memcpy(b,a,sizeof(a))。

    “memset(a,0,sizeof(a))”的作用是把数组a清零,它也在string.h中定义。虽然也能 用for循环完成相同的任务,但是用memset又方便又快捷。

    函数strlen(s)的作用是获取字符串s的实际长度。什么叫实际长度呢?字符数组s的大小是 20,但并不是所有空间都用上了。如果输入是“2357”,那么实际上s只保存了5个字符(不要 忘记了还有一个结束标记“”),后面15个字符是不确定的(还记得吗?变量在赋值之前是 不确定的)。strlen(s)返回的就是结束标记之前的字符个数。因此这个字符串中的各个字符 依次是s[0], s[1],…, s[strlen(s)-1],而s[strlen(s)]正是结束标记“”。

    之前学习了使用“scanf("%s")”输入字符串,但却不能在本题中使用它,因为它碰到空格 或者TAB就会停下来。虽然下次调用时会输入下一个字符串,可是不知道两次输入的字符串 中间有多少个空格、TAB甚至换行符。可以用下述两种方法解决这个问题:
    第一种方法是使用“fgetc(fin)”,它读取一个打开的文件fin,读取一个字符,然后返回一 个int值。为什么返回的是int而不是char呢?因为如果文件结束,fgetc将返回一个特殊标记 EOF,它并不是一个char。如果把fgetc(fin)的返回值强制转换为char,将无法把特殊的EOF和 普通字符区分开。如果要从标准输入读取一个字符,可以用getchar,它等价于fgetc(stdin)。

  • 相关阅读:
    LaTeX入门
    用jdom来解析xml文件小Demo
    Java乔晓松基于注解的面向AOP(切面)编程
    三层架构实战篇—系统登录实例
    selenium ide插件介绍
    WPF17行为(以控件在界面拖动为例)
    火狐浏览器显示“已阻止载入混合活动内容“的解决方法
    博客园—打赏功能
    网页返回顶部的几种方法
    自定义美化博客园
  • 原文地址:https://www.cnblogs.com/hcw110/p/9840248.html
Copyright © 2011-2022 走看看