您的位置:首页 > 其它

字符串读入汇总

2015-12-19 21:54 204 查看
字符串的输入的主流函数:

一、scanf(); 二、cin; 三、gets(); 四、getline(); 五、sscanf()。

一、scanf("%s",str);

遇见空格或换行就停止。

#include<stdio.h>

int main()

{

char str[100];

while(true)

{

scanf("%s",str);

printf("%s\n",str);

}

return 0;

}

输入:123 456

输出:123

456



二、cin>>str;与scanf();

相似遇见空格或换行就停止;以文件结束。



三、gets(str);

gets(str)函数与 scanf("%s",&str) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,

就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止或文件结束。



四、getline(cin,str);

需要加头文件#include<stdlib.h> ;而且str 必须是 string类型;

读入一行以文件或换行结束。



五、sscanf();

1、sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

2、 %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

  %[aB'] 匹配a、B、'中一员,贪婪性

  %[^a] 匹配非a的任意字符,贪婪性

3、用法例子

a. 常见用法。

  char buf[512] ;

  sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!

  printf("%s\n", buf);



  结果为:123456



  b. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

  sscanf("123456 ", "%4s", buf);

  printf("%s\n", buf);

  结果为:1234



  c. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

  sscanf("123456 abcdedf", "%[^ ]", buf);

  printf("%s\n", buf);

  结果为:123456



  d. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

  sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

  printf("%s\n", buf);

结果为:123456abcdedf

  当输入:

  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);

  printf("%s\n",buf);

  结果为:123456

  e. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

  sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

  printf("%s\n", buf);

  结果为:123456abcdedf



  f、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中

  sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);

  printf("%s\n", buf);

  结果为:12DDWDFF



  g、给定一个字符串"hello, world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)

  sscanf("hello, world", "%*s%s", buf);

  printf("%s\n", buf);

  结果为:world



  %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

  如果没有空格则结果为NULL。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: