×

sscanf scan 提取

sscanf(c语言 能用sscanf函数提取一行代码中某个字符后面的字符串吗)

admin admin 发表于2023-05-03 01:13:36 浏览39 评论0

抢沙发发表评论

本文目录

c语言 能用sscanf函数提取一行代码中某个字符后面的字符串吗

1、当然能。sscanf相当于格式输入,能够处理任何特殊格式的输入。

2、例如:

#include 《stdio.h》
int main()
{
char abd=“aaabc.jpg“;
char buf1;
sscanf(abd, “%“, buf1, buf2); //通过ssanf获得文件名及后缀名
printf(“buf1=%s buf2=%s“,buf1, buf2);
}

sscanf()如何实现

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
举个例子给你看:
char* pQueryStr=getenv(“QUERY_STRING“);
char pName;
sscanf(pQueryStr,“name=%s“,pName);
printf(“Hello %s!\n“,pName);
最后显示出来的就是:Hello tom!

sscanf的用法

sscanf能简单提出字符串,不过要想跟复杂一些,需要用其它手段进行处理
#include“stdio.h“
#include“stdlib.h“
#include “ctype.h“
void main()
{
char* pBuf = “64.1, 68.8,Na, 0, 1000000, 1, 150000“;
char p1={0};
char p2={0};
char copyp2={0};
char *p,*cp2,*s;
int num;
sscanf(pBuf,“%
printf(“%s\n“,p1);
sscanf(pBuf,“%*
printf(“%s\n“,p2);
//去掉0和1的数字
for(p=p2,cp2=copyp2;*p;)
{
switch (*p)
{
//是数字
case ’0’:case ’1’:case ’2’:case ’3’:case ’4’:
case ’5’:case ’6’:case ’7’:case ’8’:case ’9’:
num=0;
s = p;//记录开始位置
while(*p && isdigit(*p))
{
num = num * 10 + (*p++ - ’0’);//转换数字
}
if(num 》 1)//大于1就拷贝
while(s != p)
*cp2++ = *s++;
else
p++;//跳过逗号
default:
*cp2++ = *p++;
break;
}
}
*cp2 = ’\0’;
printf(“%s\n“,copyp2);
}

关于sscanf()函数

后面,m的值是123!n=456,,,,,那个表达式应该不符合
改成
#include 《stdio.h》
#include《stdlib.h》
int main(){
char a=“m=123!n=456&b=delete“;
char m;
char c;

sscanf(a,“m=%&b=%s“, m, n);
printf(“m=%s, n=%s\n“, m, n);

//char *x=m;
sscanf(m,“%!n=%s“);
printf(“c=%s, d=%s\n“, c, d);

return 0;
}
// 结果:
// m=123!n=456, n=delete
// c=123, d=456

sscanf 这个函数 的作用

scanf是从标准输入设备(即键盘)输入字符串来赋给变量相应的值。
sscanf是从一个字符串从读取数据来赋给变量相应的值。
比如sscanf(“1 2 3“,“%d%d%d“,&a,&b,&c);
和scanf(“%d%d%d“,&a,&b,&c),然后键盘输入1 2 3的效果是一样的。

C语言 sscanf() 用法

C语言函数sscanf()的用法sscanf() - 从一个字符串中读进与指定格式相符的数据.  函数原型:  int sscanf( string str, string fmt, mixed var1, mixed var2 ... );  int scanf( const char *format 匹配非a的任意字符,贪婪性注意:在读入的字符串是空字符串时,sscanf函数并不改变待读入到的字符串的值。

sscanf()什么意思

sscanf,表示从字符串中格式化输入
上面表示从str中,输入数字给x,就是32700
久以前,我以为c没有自己的split string函数,后来我发现了sscanf;一直以来,我以为sscanf只能以空格来界定字符串,现在我发现我错了。

sscanf是一个运行时函数,原形很简单:
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
它强大的功能体现在对format的支持上。

我以前用它来分隔类似这样的字符串2006:03:18:
int a, b, c;
sscanf(“2006:03:18“, “%d:%d:%d“, a, b, c);
以及2006:03:18 - 2006:04:18:
char sztime1 = ““;
sscanf(“2006:03:18 - 2006:04:18“, “%s - %s“, sztime1, sztime2);

但是后来,我需要处理2006:03:18-2006:04:18
仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。

我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。

format-type中有%。
%表示读取除a-z以外的所有字符。

所以那个问题也就迎刃而解了:
sscanf(“2006:03:18 - 2006:04:18“, “%“, sztime1, sztime2);
在softmse (Jake) 的问题贴
PS: 向星星大哥和softmse (Jake) 致谢了,有了你们才有它啊