#include <stdio.h> #include <string.h> #include<vector> #include<iostream> using namespace std; int main() { string buff ="55.5 22 6688 99 55"; char *pp=NULL; char *buf= (char*)buff.c_str();//string转换char* //char *ptr = strtok(buf, " ");//分解字符串的函数 第一个参数为 char* 字符串buf首地址,第二个为分割符,这里为空格。 第一次调用输入char* 字符串buf首地址。 //返回第一次被分割的字符串首地址。 /*strtok(char* s,const char* delim); 简介 当strtok()在参数s的字符串中发现分割符参数delim中包含的分割字符时(这里为空格),则会将该字符改为 字符 返回值: 从s开头开始的一个个被分割的串的首地址。当s中的字符查找到末尾时,返回NULL。 如果查找不到delim中的字符时,返回当前strtok的字符串的指针。 所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。*/ char *ptr = strtok_s(buf, " ",&pp);//strtok_s功能和strtok一样,只是把每次剩余的字符串放入第三个参数(这里为pp里),更安全。 double a[5]; int i=0; while(ptr) { a[i]=atof(ptr);//数字字符串转换成double类型:double //atoi()是数字字符串转换成int类型 cout<<"origin : "<<a[i]<<endl; i++; ptr = strtok_s((char *)NULL, " ",&pp);//以后每次调用 ,第一个参数输入(char *)NULL,在strtok_s()函数执行到char* 字符串buf的最后,返回NULL,循环结束。 //ptr = strtok((char *)NULL, " ");//以后每次调用 ,第一个参数输入(char *)NULL,在strtok()函数执行到char* 字符串buf的最后,返回NULL,循环结束。 } for(int i=0;i<5;i++) { cout<<"a[i]:"<<a[i]<<endl; } }