zoukankan      html  css  js  c++  java
  • 【406】C语言相关函数

    <stdlib.h>(1) <stdlib.h>(2)

    malloc()

    用来动态地分配内存空间,分配成功返回指向该内存的地址,失败则返回 NULL。

    • 前面的 (int*) 或者 (char*) 表明数据类型
    //不出现方括号
    //将字符串复制到 str_start
    char *str_start = malloc(sizeof(char)*1024);
    strcpy(str_start, "9 12 5  4 2  b 7    11 3 6 10 13  14  1 8 15 ");
    

    realloc()

    重新分配内存空间

    atoi()

    C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

    • 如果参数不是可转化的数字,则会转为0。
    • atoi("b") = 0
    • 返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

    itoa()

    将整型值转换为字符串。(只在 Windows 下,不在 Linux 下,后者使用 sprintf

    <stdio.h>

    scanf()

    C 库函数 int scanf(const char *format, ...) 从标准输入 stdin 读取格式化输入。

    • format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符format 说明符
    • 附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
    • 可以输入数字,字符串,字符等
    • 返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

    • &a、&b、&c 中的 & 是地址运算符,分别获得这三个变量的内存地址。
    • %d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。
    • 在用 %c 输入时,空格和"转义字符"均作为有效字符。
    •  scanf("%d%d%d",&a,&b,&c);  

    注意 scanf 中参数的取地址符,返回值为赋值参数的个数

    // counts+.c
    // reads an integer from stdin and counts
    // prompts the user
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
       int num;
       printf("Please input a number: "); // this line added to counts.c
       if (scanf("%d", &num) != 1) {
          fprintf(stderr, "Usage: a number expected
    ");
          return EXIT_FAILURE;
       }
       for (int i=1; i<=num; i++) {
          printf("%d ",i);
       }
       printf("
    ");
       return EXIT_SUCCESS;
    }
    

    fscanf()

    C 库函数 int fscanf(FILE *stream, const char *format, ...) 从流 stream 读取格式化输入。

    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
    • format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符format 说明符
      format 说明符形式为 [=%[*][width][modifiers]type=]
    • 附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

    fgets()

    C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

    • str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
    • n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    	char r[10];
    	char s[10];
    	char t[10];
    
    	int r_num;
    	int s_num;
    	int t_num;
    	int sum = 0;
    	
    	// get data from stdin
    	// stdin can be substitued by FILE
    	// for stdin: we can input data from command line or 
    	// from files, like ./a.out < input.txt
    	fgets(r, 10, stdin);
    	fgets(s, 10, stdin);
    	fgets(t, 10, stdin);
    	
    	//determine whether data are integer or not
    	if (sscanf(r, "%d", &r_num) != 1 || sscanf(s, "%d", &s_num) != 1 || sscanf(t, "%d", &t_num) != 1) {
    		fprintf(stderr, "Not all of strings can convert to integer.
    ");
    		return EXIT_FAILURE;
    	}
    	else {
    		sum = r_num + s_num + t_num;
    		fprintf(stdout, "Toal: %d.
    ", sum);
    	}
    	return EXIT_SUCCESS;
    }
    

    fprintf()

    C 库函数 int fprintf(FILE *stream, const char *format, ...) 发送格式化输出到流 stream 中。

    • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
    • format -- 这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier
    • 附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
    • 返回值:如果成功,则返回写入的字符总数,否则返回一个负数。
    • file可以使 stderr 或者 stdout
    • 参考:https://wiki.cse.unsw.edu.au/cs9024cgi/19T2/Lec01IO
    • 参考:格式化输出函数fprintf()中的stdout、stderr
    //读取的数据存储在 str 中
    //可以通过手动输入
    //也可以通过命令行从文件输入
    //a < input.txt
    //将需要输入的信息存储到 input.txt 中即可
    fgets(str, 50, stdin);
    
    //可以直接输出到控制台
    //也可以通过命令行输出到文件中
    //a < input.txt > output.txt
    //只会将含有 stdout 的内容输出到文件中
    //带有 stderr 的部分则是正常以错误的形式打印在控制台上
    fprintf(stderr, "Error!");
    fprintf(stdout, "Error!");
    

    gets()

    C 库函数 char *gets(char *str) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

    sprintf()

    C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串。

    • str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
    • format -- 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier
    • 附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
    • 返回值:如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
    • 相当于转字符串函数(将其他格式转换为字符串)

    sscanf()

    C 库函数 int sscanf(const char *str, const char *format, ...) 从字符串读取格式化输入。

    • str -- 这是 C 字符串,是函数检索数据的源。
    • format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符format 说明符
      format 说明符形式为 [=%[*][width][modifiers]type=]
    • 附加参数 -- 这个函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象类型由 format 字符串中相应的 % 标签指定,参数与 % 标签的顺序相同。
    • 返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
    • sscanf(str, "%d", &num) == 1:相当于判断是否能将字符串转为整数,如果可以则会返回 True,同时转化好的整数会存储在 num 内部。
    • 将字符串转换为其他参数
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
       int day, year;
       char weekday[20], month[20], dtm[100];
    
       strcpy( dtm, "Saturday March 25 1989" );
       sscanf( dtm, "%s %s %d  %d", weekday, month, &day, &year );
    
       printf("%s %d, %d = %s
    ", month, day, year, weekday );
        
       return(0);
    }
    

    直接通过参数传递

    参考:Sscanf问题和从命令行读取

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[]) {
    	int r_num;
    	int s_num;
    	int t_num;
    	int sum = 0;
    	
    	//determine whether data are integer or not
    	if (sscanf(argv[1], "%d", &r_num) != 1 || sscanf(argv[2], "%d", &s_num) != 1 || sscanf(argv[3], "%d", &t_num) != 1) {
    		fprintf(stderr, "Not all of strings can convert to integer.
    ");
    		return EXIT_FAILURE;
    	}
    	else {
    		sum = r_num + s_num + t_num;
    		fprintf(stdout, "Toal: %d.
    ", sum);
    	}
    	return EXIT_SUCCESS;
    }
    

    <string.h>

    strtok()

    C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

    strcmp()

    C 库函数 int strcmp(const char *str1, const char *str2)str1 所指向的字符串和 str2 所指向的字符串进行比较。

    • 通过 == 来判断的话,是需要地址也一致的
    • 如果返回值 < 0,则表示 str1 小于 str2。
    • 如果返回值 > 0,则表示 str2 小于 str1。
    • 如果返回值 = 0,则表示 str1 等于 str2。

    strcpy()

    C 库函数 char *strcpy(char *dest, const char *src)src 所指向的字符串复制到 dest

    • 该函数返回一个指向最终的目标字符串 dest 的指针。

    • struct 内部字符串赋值需要用到 strcpy 函数。

    不出现数组形式的字符串:

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main() {
       char *str = malloc(sizeof(char) * 100);
       strcpy(str, "9  12 5  4c 2  b 7     11 3 6 10 13  14   1 8 15 ");
       //char str[100] = "lsdkjflsdjflsdjflkdsjfkl";
       //printf("%s", str);
       printf("%s
    ", str);
       return 0;
    }
    

    <math.h>

    ceil()

    C 库函数 double ceil(double x) 返回大于或等于 x 的最小的整数值。返回值为 double。

  • 相关阅读:
    #pragma
    STL~heap
    codeforces682A
    POJ1753(位操作和枚举)
    位运算
    getchar()(转)
    UVA2636
    UVA2639
    UVA2322
    UVa2521
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/11063927.html
Copyright © 2011-2022 走看看