#include<string.h> #include<stdio.h> int main() { char buf[512],sztime1[16],sztime2[16]; sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中! printf("%s\n", buf); sscanf("123456 ", "%4s", buf);//取最大长度为4字节的字符串 printf("%s\n", buf); sscanf("123456a bcdedf", "%[^ ]", buf);//取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。 printf("%s\n", buf); sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);//取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。 printf("%s\n", buf); sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);//取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。 printf("%s\n", buf); //给定一个字符串iios/[email protected],获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非‘@‘的一串内容送到buf中 sscanf("iios/[email protected]", "%*[^/]/%[^@]", buf); printf("%s\n", buf); //给定一个字符串"hello, world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串) sscanf("hello, world", "%*s%s", buf);//%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了,如果没有空格则结果为NULL。 printf("%s\n", buf); //sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式. //如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。 //%[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。 sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2); printf("%s,%s\n", sztime1,sztime2); //%[^-]匹配到‘-’默认为存到sztime1的字符串“2006:03:18”加空格符, //所以%s会默认输入“-2006:04:18”到sztime2这也就是%s前面加‘-’的原因。输出跟作者一样,但更易懂、易读。 sscanf("2006:03:18-2006:04:18","%[^-]-%s",sztime1,sztime2); printf("%s,%s\n", sztime1,sztime2); } int main() { char *p; char *q="abcdef"; sprintf(p,"%s",q); printf("p=%s\n\n",p); }
时间: 2024-10-16 06:10:13