C语言基础(五)

一、字符串相关函数

  1.gets()(输入字符串)

      格式:gets(字符串);

   (1)区别:gets(str)与scanf(“%s”,str)

      gets(str)允许输入的字符串含有空格

      scanf(“%s”,str)不允许含有空格

  注意:由于以上无法知道字符串大小,很容易导致字符数组越界

  2.fgets()(输入字符串)

    格式:fgets(char *s, int size, FILE *stream)

      s:字符串;

      size:指定最大读取字符的长度(size-1)

      stream:文件指针,如果读键盘输入的字符串,固定写为stdin

    结尾自带"\n".不用担心越界问题

  3.puts()(字符串输出)

    格式:puts(字符串)

    在输出后自动输出一个“\n”

  4.fputs()(字符串输出)

    格式:fputs(constchar * str, FILE * stream)

      s:字符串

      stream:文件指针,如果读键盘输入的字符串,固定写为stdin

    注意:fputs()是puts()的文件操作版本,但fputs()不会自动输出一个'\n'


  5.srelen()(计算指定字符串大小)

    格式:strlen(const char *s);

       s:字符串首地址

  6.strcpy()(把src所指向的字符串复制到dest所指向的空间中,'\0'也会拷贝过去)

    格式strcpy(dest, src)

    dest:目的字符串首地址

         src:源字符首地址

    连接后:

    注意:如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况。

  7.strncpy()

     功能:把src指向字符串的前n个字符复制到dest所指向的空间中,是否拷贝结束符 

        看指定的长度是否包含'\0'。

     格式:strncpy(dest, src, size_t n)

         dest:目的字符串首地址

              src:源字符首地址

              n:指定需要拷贝字符串个数

  8.strcat()

    功能:将src字符串连接到dest的尾部,‘\0’也会追加过去

    格式:strcat(dest, src)

        dest:目的字符串首地址

             src:源字符首地址

  9.strncat()

    功能:将src字符串前n个字符连接到dest的尾部,‘\0’也会追加过去

    格式:strncat(dest, src, size_t n)

        dest:目的字符串首地址

             src:源字符首地址

             n:指定需要追加字符串个数

  10.strcmp()

    功能:比较 s1s2 的大小,比较的是字符ASCII码大小

    格式:strcmp(s1,s2)

      s1:字符串1首地址

           s2:字符串2首地址

  11.strncmp()

    功能:strcmp的追加,比较前n个大小的字符大小,比较的是字符ASCII码大小

    格式:strncmp(s1,s2,n)

 

      s1:字符串1首地址

           s2:字符串2首地址

           n:指定比较字符串的数量

 

  12.sprintf()

   功能:格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符 '\0'  为止

   格式:sprintf(str, format, ...)

      str:字符串首地址

           format:字符串格式,用法和printf()一样

  13.sscanf()

   功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据

   格式:sscnf(strformat, ...)

      str:指定的字符串首地址

           format:字符串格式,用法和scanf()一样

  14.strchr()

    功能:在字符串s中查找字母c出现的位置

    格式:strchr(s, int c)

      s:字符串首地址

           c:匹配字母(字符)

  15.strstr()

    功能:查找在字符串riunv中找llunk出现的位置

    格式:strstr(riunv,link)

  16.strtok()

    功能:来将字符串分割成一个个片段。当strtok()在参数s的字符串中发现

       参数delim中包含的分割字符时, 则会将该字符改为\0 字符,当连

          出现多个时只替换第一个为\0。

    格式:strtok(str, delim)

       str:指向欲分割的字符串

            delim:为分割字符串中包含的所有字符

注意: 在第一次调用时:strtok()必需给予参数s字符串

    往后的调用则将参数s设置成NULL,每次调用成功则返回指向被分割出片段的指针

  17.atoi()

    功能:atoi()会扫描nptr字符串,跳过前面的空格字符,

       直到遇到数字或正负号才开始做转换,而遇到

       非数字或字符串结束符('\0')才结束转换,并将结果返回返回值。

    格式:atoi(nptr);

          nptr:待转换的字符串

  拓展(与atoi类似的)

    1.atof():把一个小数形式的字符串转化为一个浮点数。

    2.atol():将一个字符串转化为long类型

一、函数

 1.函数的定义

  返回类型 函数名(形式参数列表)

         {

                数据定义部分;

                执行语句部分;

    }

 2.函数名

   可以随意取,但最好见名知意

注意:函数名的后面有个圆换号(),代表这个为函数,不是普通的变量名。

 3.形参列表

  在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以,形参里的变量不能赋值。

  定义:类型+变量的形式

 4.函数体

  函数功能实现的过程

 5.返回值

  函数的返回值是通过函数中的return语句获得

注意:如果函数返回的类型和return语句中表达式的值必须一致,程序则会报错。

  

课后作业

  

思考任务(课后练习)

 

1、设计一个计算器,可以进行加、减、乘、除运算,类型全部都是int即可

        要求从键盘输入指令及操作数,如:

        add 15 25        //计算15+25的值,并返回结果

        sub 25 15        //计算25-15的值,并返回结果

        mux 3 5           //计算 3*5的值, 并返回结果

        dive 25 5        //计算25/5的值,并返回结果

 

提示:1) 需要封装函数

          2) scanf("%s %d %d", name, a, b);

 

2、不用使用库函数,编写一个函数my_strcmp(),功能和strcmp()一样,实现字符串大小比较:

int my_strcmp(char s1[], char s2[]);

int main()

{

        char s1[] = "hello world";

        char s2[] = "hello abc";

        int flag = my_strcmp(s1, s2);

        if(flag == 0)

        {

                printf("%s 等于 %s\n", s1, s2);

        }

        else if(flag > 0)

        {

                printf("%s 大于 %s\n", s1, s2);

        }

        else

        {

                printf("%s 小于 %s\n", s1, s2);

        }

        return 0;

}

 

 

 

答案

1.

#include<stdio.h>

#include<string.h>

int main()
{
  int a=0,b=0;
  char name[5];
  char s2[5]="add";
  char s3[5] = "sub";
  char s4[5] = "mux";
  char s5[5] = "dive";
  printf("请输入加add,减sub,乘mux,除dive\n");
  gets(name);
  printf("请输入两个数:\n");
  scanf("%d %d", &a, &b);
  if (strcmp(name, s2) == 0)
  {
    printf("%d", a + b);
  }
  else
  if (strcmp(name, s3) == 0)
  {
    printf("%d", a - b);
  }
  else
  if (strcmp(name, s4) == 0)
  {
    printf("%d", a*b);
  }
  else
  if (strcmp(name, s5) == 0)
  {
    printf("%d", a/b);
  }
  else
  {
    printf("输入出错");
  }
  return 0;
}

 

2.

#include<stdio.h>

#include<string.h>

int my_strcmp(char s1[], char s2[])
{
  int i;
  i = strcmp(s1, s2);
  return i;
}
int main()
{
  int flag;
  char s1[] = "hello world";
  char s2[] = "hello abc";
  flag = my_strcmp(s1, s2);
  if (flag == 0)
  {
    printf("%s等于%s\n", s1, s2);
  }
  else

  if (flag > 0)
  {
    printf("%s大于%s\n", s1, s2);
  }
  else
  {
    printf("%s小于%s\n", s1, s2);
  }
  return 0;
}

 

 

 

   

  

posted @ 2019-04-11 23:37  Riunv  阅读(241)  评论(0编辑  收藏  举报