scanf家族 正则式

来源:互联网 发布:桔子网络理财可靠吗 编辑:程序博客网 时间:2024/05/06 20:30
好吧,scanf家族函数很强大。

下面介绍几个例子

1、输入文件,输出字符串数大于80的行
#include <stdio.h>#include <stdlib.h>/*a数组的长度至少为n+2*/void fun(char a[], int n){     int i;     char s[18], t[18];     //输出大于n的行,构造输入表达式如%80[^\n],以换行符为结束     sprintf(s, "%%%d[^\n]", n+1);     sprintf(t, "%%%d[^\n]%%c", n);       for (scanf("%[\n]", a); (i = scanf(t, a, a+n+1)) != EOF; scanf("%[\n]", a)) {         if (i == 2 && a[n+1] != '\n') {//如果输入两个参数,且第二个参数不是换行符,说明是遇到大于n的行             printf("%s%c", a, a[n+1]);                 while (scanf(s, a) > 0) {                     printf("%s", a);                 }             printf("\n");         }     }}int main(void){    char a[11] = "asd";      freopen("hello.txt", "r", stdin);    fun(a, 10);    freopen("CON", "r", stdin);    return 0;}


2、去除形如/**/的注释
#include <stdio.h>#include <stdlib.h>void fun(void){    int i;    char a[11], flag;      while ((i = scanf("%10[^\"/]%c", a, &flag)) != EOF) {         printf("%s", a);         if (i == 2) {             if(flag == '"') {                 putchar('"');                 while (scanf("%10[^\"]", a) > 0) {                     printf("%s", a);                 }                 scanf("%c", &flag);                 putchar('"');             } else if(flag == '/') {                 scanf("%c", &flag);                 while (scanf("%*[^*]%[*]", a) > 0) {                     scanf("%c", &flag);                     if (flag == '/') {                          break;                     }                 }             } else {                 putchar(flag);             }         }     }}


3、去除1个字符串中包含另一个字符串的字符
#include <stdio.h>#include <stdlib.h>char *squeeze(char s1[], const char s2[]){    char a[100];      sprintf(a, "%%[^%s]", s2);//以s2字符串过滤s1字符串    if (sscanf(s1, a, s1) == 0) {        s1[0] = 0;    }             return s1;}int main(void){    char s1[10], s2[10];      freopen("hello.txt", "r", stdin);    while (scanf("%s%s", s1, s2) != EOF) {         printf("%s\n", squeeze(s1, s2));    }    freopen("CON", "r", stdin);    return 0;}

4、16进制字符串转化为数字
#include <stdio.h>#include <stdlib.h>void htoi(char str[], int *val){    sscanf(str, "%x", val);}int main(void){    char str[20];    int val;      while (scanf("%s", str) != EOF) {         htoi(str, &val);         printf("%d\n", val);    }    return 0;}

。。。简单的正则式表达,威力无穷啊。。
原创粉丝点击