字符串是以空字符'\0' 结尾的char类型数组
char name[40];

IO

fgets()stdio.h输入输出函数系列中的可选扩展

第二个参数指明读入字符的最大数量n,将在读入到第n-1或第一个换行符时,终止读入。换行符也会存储在字符串中。
第三个参数知名要读入的文件。可以用stdin作为参数。
gets_s(words,strlen);

fputs(str,stdout);

字符串输出:C的三个标准库函数
puts(str);
会在结尾自动参加换行符,遇到空字符时停止输出。

fputs();
第二个参数指明要写入的文件
不会在输出的末尾添加换行符

字符串函数
定义在string.h中的:
strlen()
用于统计字符串的长度,参数为字符串,返回值为长度

strcat()
接受两个字符串作为参数,将第二个字符串的备份附加在第一个字符串的末尾,第二个字符串不变

strncat()
strcat的安全版本,规定第三个参数指定最大添加字符数

strcmp
通过比较运算符来比较字符串,如果两个字符串参数相同,返回0,否则返回非0

strncmp()
扩展版本

strcpy
拷贝字符串

库函数stdlib.h

qsort()

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void * , const void *))

  • base — 指向要排序的数组的第一个元素的指针。
  • nitems — 由 base 指向的数组中元素的个数。
  • size — 数组中每个元素的大小,以字节为单位。
  • compar — 用来比较两个元素的函数。

第一个参数是指针,指向待排序数组的首元素;第二个参数是待排序项的数量;第三个函数是数组中每个元素的大小,如sizeof(double),第四个参数确定了比较参数的形式,是一个指向函数的指针
如果 compar 返回值小于 0(< 0),那么 p1 所指向元素会被排在p2所指向元素的前面
如果 compar 返回值等于 0(= 0),那么 p1 所指向元素与 p2 所指向元素的顺序不确定
如果 compar 返回值大于 0(> 0),那么 p1 所指向元素会被排在 p2 所指向元素的后面。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int values[] = { 88, 56, 100, 2, 25 };
  4. int cmpfunc (const void * a, const void * b)
  5. {
  6. return ( *(int*)a - *(int*)b );
  7. }
  8. int main()
  9. {
  10. int n;
  11. printf("排序之前的列表:\n");
  12. for( n = 0 ; n < 5; n++ ) {
  13. printf("%d ", values[n]);
  14. }
  15. qsort(values, 5, sizeof(int), cmpfunc);
  16. printf("\n排序之后的列表:\n");
  17. for( n = 0 ; n < 5; n++ ) {
  18. printf("%d ", values[n]);
  19. }
  20. return(0);
  21. }
  1. {
  2. char first[40];
  3. char last[40];
  4. }struct names staff[100];
  5. int comp(const void *p1,const void *p2){
  6. const struct names *ps1=(const struct names *) p1;
  7. const struct names *ps2=(const struct names *) p2;
  8. int res;
  9. res = strcmp(ps1->last,ps2->last);//比较姓
  10. if(res!=0) rsturn res;//若非同姓,直接返回
  11. else return strcmp(ps1->first,ps2->first);
  12. }
  13. qsort(staff,100,sizeof(struct names),comp);