gets strtok sscanf 实现读入一行并分割字符

来源:互联网 发布:网络分配器 编辑:程序博客网 时间:2024/06/06 02:19

http://www.cnblogs.com/hoys/archive/2011/09/19/2180999.html

http://www.cnblogs.com/longzhao1234/archive/2012/05/31/2528317.html

gets strtok sscanf 组合实现读入一行,分割字符

 类似strtok功能还有 strtok_r 和 strsep


strtok使用

(1)第一次传字符串指针(不能指向常量),之后传NULL

(2)使用后字符串被改变

(3)返回值p

#include<stdio.h>#include<string.h>#include <sstream>using namespace std;char s[1000];int main(){    while (gets(s))    {        char *p = strtok(s, " ");        while (p)        {            int x;            sscanf(p,"%d", &x);            printf("%d*", x);            p = strtok(NULL, " ");        }        puts("");    }    while (gets(s))    {        int x;        istringstream ss(s);        while (ss >> x)        {            printf("%d*", x);        }        puts("");    }//    while (gets(s))//    {//        char *pp;//        char *p = strtok_r(s, " ", &pp);//        while (p)//        {//            int x;//            sscanf(p,"%d", &x);//            printf("%d*", x);//            p = strtok_r(NULL, " ", &pp);//        }//        puts("");//    }////    while (gets(s))//    {//        char *p = strsep(&s, " ");//        while (p)//        {//            int x;//            sscanf(p,"%d", &x);//            printf("%d*", x);//            p = strsep(&s, " ");//        }//        puts("");//    }    return 0;}/**#include<stdio.h>#include<string.h>#define INFO_MAX_SZ 255int main(){    int in=0;    char buffer[INFO_MAX_SZ]="Fred male 25,John male 62,Anna female 16";    char *p[20];    char *buf=buffer;    char *outer_ptr=NULL;    char *inner_ptr=NULL;    while((p[in]=strtok_r(buf,",",&outer_ptr))!=NULL) {        buf=p[in];        while((p[in]=strtok_r(buf," ",&inner_ptr))!=NULL) {            in++;            buf=NULL;        }        p[in++]="***";        buf=NULL;    }    printf("Here we have %d strings\n",i);    for (int j=0; jn<i; j++)        printf(">%s<\n",p[j]);    return 0;}*/


0 0
原创粉丝点击