sscanf连续扫描字符串

在C语言中,fgets函数功能为从指定的流中读取数据,每次读取一行。

其原型为:

char *fgets(char *str, int n, FILE *stream);

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

sscanf函数,用于从字符串中按照指定的格式解析数据。它类似于scanf函数,但不是从标准输入流读取数据,而是从字符串中提取数据。sscanf函数可以根据格式字符串指定的规则,将字符串中的数据提取出来并存储到对应的变量中。

其原型为:

int sscanf(const char* str, const char* format, ...);

str:要解析的输入字符串。
format:格式字符串,指定了要匹配的格式规则。
...:可变参数列表,用于接收解析后的数据。


用fgets函数从控制台接受一段文本,其单词之间用空格分开。怎么解析出一个个单词呢?可以用sscanf(buffer,"%s",str)从缓冲区中逐个解析出字符串。


使用sscanf函数扫描字符串,需要逐次移动buffer指针。我们可以利用sscanf函数的%n格式实现这个调整。%n格式不会影响扫描结果,但是他会返回扫描成功的长度。以下是一个例子:

#include <stdio.h>
#include <string.h>

int main()
{
    int n=0;
    int len=0, l=0;
    char str[31];
    char temp[1201];
    fgets(temp, 1200, stdin);//从控制台得到一段文本
    char *p = temp;
    int length = strlen(temp);
    while (len < length - 1)
    {
        sscanf(p + len, "%s%n", str, &l);//分离单词
        //此处加入代码,另存解析出的单词
        len += l;
        n++;
    }
    printf("%d\n", n);
}

这个例子中,利用 %n 格式,返回每次扫描成功的长度给变量 l ,根据 l 调整缓冲区指针 p 就能逐步分离出单词了。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值