📜  C中的扫描集

📅  最后修改于: 2021-05-25 21:54:19             🧑  作者: Mango

scanf系列函数支持用%[]表示的scanset说明符。里面扫描集,我们可以指定单个字符或字符范围。在处理scanset时,scanf将仅处理属于scanset的那些字符。我们可以通过将字符放在方括号内来定义scanset。请注意,扫描集区分大小写。

我们还可以通过在要添加的字符之间提供逗号来使用scanset。

例如:scanf(%s [AZ,_,a,b,c] s,str);

这将扫描扫描集中的所有指定字符。
让我们来看一个例子。下面的示例仅将大写字母存储到字符数组’str’,其他任何字符都将不存储在字符数组中。

C
/* A simple scanset example */
#include 
 
int main(void)
{
    char str[128];
 
    printf("Enter a string: ");
    scanf("%[A-Z]s", str);
 
    printf("You entered: %s\n", str);
 
    return 0;
}


C
scanf("%[^o]s", str);


C
/* Another scanset example with ^ */
#include 
 
int main(void)
{
    char str[128];
 
    printf("Enter a string: ");
    scanf("%[^o]s", str);
 
    printf("You entered: %s\n", str);
 
    return 0;
}


C
/* implementation of gets() function using scanset */
#include 
 
int main(void)
{
    char str[128];
 
    printf("Enter a string with spaces: ");
    scanf("%[^\n]s", str);
 
    printf("You entered: %s\n", str);
 
    return 0;
}


[root@centos-6 C]# ./scan-set 
  Enter a string: GEEKs_for_geeks
  You entered: GEEK

如果scanset的第一个字符为’^’,则说明符将在该字符第一次出现后停止读取。例如,下面给出的scanset将读取所有字符,但在首次出现’o’之后停止

C

scanf("%[^o]s", str);

让我们来看一个例子。

C

/* Another scanset example with ^ */
#include 
 
int main(void)
{
    char str[128];
 
    printf("Enter a string: ");
    scanf("%[^o]s", str);
 
    printf("You entered: %s\n", str);
 
    return 0;
}
[root@centos-6 C]# ./scan-set 
  Enter a string: http://geeks for geeks
  You entered: http://geeks f
  [root@centos-6 C]# 

让我们通过使用扫描集来实现gets()函数。 gets()函数从stdin读取一行到s所指向的缓冲区,直到找到终止的换行符或EOF。

C

/* implementation of gets() function using scanset */
#include 
 
int main(void)
{
    char str[128];
 
    printf("Enter a string with spaces: ");
    scanf("%[^\n]s", str);
 
    printf("You entered: %s\n", str);
 
    return 0;
}
[root@centos-6 C]# ./gets 
  Enter a string with spaces: Geeks For Geeks
  You entered: Geeks For Geeks
  [root@centos-6 C]# 
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。