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 255
int 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;
}
*/