一些函数总结(3)

C语言字符串的读取

为什么要使用fgets()函数?

在C语言,常用的同类函数还有fscan()和gets(),不过这两种函数都有其缺点,或 者可以说是制约性。

fscan()函数不能读取带有空格的字符串,当字符串中含有空格时,函数只能读取 空格之前的字符串,空格之后的全部忽略。

gets()函数虽然可以操做带有空格的字符串,不过容易引起溢出,因为C语言是将 字符串当做一种数组操做的,既然是数组,就有长度,如果gets ()函数读取的字 符串长度大于被赋值数组的长度,就会引起溢出,而且新版的GCC已经不能正确编 译gets()函数了,会报错。

fgets()函数的基本用法为: fgets(char * s,int size,FILE * stream);

括号中,第一个参数为将被赋值的数组名,这里需要注意的是,其中不用写数组名 称后面的方括号以及其中的数组长度。 第二个参数是将要读取字符串的长度,这里需要注意的是,这里长度的数值是“字 符串实际长度+1”,加1是因为,字符串最后面还有一个/0位。 最后一个参数为输入设备或者变量。一般情况下,我们都是从键盘输入,也就是 stdin。(从文件读取的这里暂不说明)

OK!现在举一个例子!下面的这段代码作用在于,属于一个字符串,然后计算出字 符串中单词的个数。

 

#include<stdio.h>

#include<string.h>

main()

{

char dia[80];

    char t,m;

    int i=0,num=0,flag=0;

    fgets(dia,80,stdin);

    fputs(dia,stdout);

 

    for (i=0;dia[i]!='/0';i++)

    {

        if (dia[i]==' ')

            flag=0;

        else

            if (flag==0)

            {

                flag=1;

                num++;

            }

    }

    printf("%d/n",num);

    return 0;

}

 

这段代码的工作原理是,使用一个用于标示的变量flag,还有一个用于统计单词个 数的变量num。然后逐一读取字符串中的每一个字符,当遇到字母时flag的值为1, 当遇到空格时,flag的值为0。如果遇到一个字母,并且此时flag值为0(说明这个 字母之前的一个字符是空格),给num加1,直到遇到空格时,将flag重新赋值为 0。 在fgets()使用中需要注意,其中第二个参数规定的字符串长度应该与字符串长度 相等,否则运行程序时会有溢出的错误。当输入的字符串大于限定的字符串长度时 (本例中限定的是80),限定长度之后的字符串会被丢弃。

 

 

strstr

  原型:extern char *strstr(char *haystack, char *needle);
        
  用法:#include <string.h>
  
  功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。
  
  说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
  
  举例:


      // strstr.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s="Golden Global View";
        char *l="lob";
        char *p;
        
        clrscr();
        
        p=strstr(s,l);
        if(p)
          printf("%s",p);
        else
          printf("Not Found!");

        getchar();
        return 0;
      }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值