可以采用C++系统的stringstream字符流类完成带空格的字符串数据的拆分,赋值给不同的变量。参考代码:
#include
#include
using namespace std;
int main()
{
istringstream istr ("123 56.7");
cout << istr.str()<int a;
istr>>a;
cout<<"int a="< float b;
istr>>b;
cout<<"float b="< return 0;
}
要使用ostringstream、istringstream、stringstream这三个类创建对象需要包含sstream头文件。
istringstream类用于执行C++风格的串流的输入操作。 该类是从istream和stringstreambase派生而来(参考cin)
ostringstream类用于执行C++风格的串流的输出操作。 该类是从ostream和 stringstreambase派生而来(参考cout)
strstream类同时可以支持C++风格的串流的输入输出操作。该类是从iostream类和stringstreambase派生而来。
分割字符串可以采用strok函数
void print_tokens(char *line)
{
static char whitespace[] = "\t\b\n\v\r "; //可以任意定义,这只是个示例
char *token;
for (token = strtok(line, whitespace); token != NULL;
token = strtok(NULL, whitespace))
printf("Next token is %s \n", token);
}
这是一个网上找的使用范例。你可以参照。
#include
#include
using namespace std;
void main()
{
string str;
while(getline(cin,str))
cout<
//getline(cin,str);
//cout<
}
strtok是c语言的一个函数,古老而造型不好⋯⋯这个模式是出名的失败(真事)
纯c++可以这么写,在不严格要求效率的情况下:
#include
#include
int main(void)
{
stringstream a;
a.str("a bc def ghij");//分割这个字符串到一个vector数组
vector
while(a){
string c;
a>>c;
b.push_back(c);
}
for(int i=0;i
return 0;
}
C语言可以吗?
#include
#include
#include
#include
typedef struct tagABC
{
int a;
double b;
char c[10];
}ABC;
#define MAXCHAR 100
ABC abc;
int main()
{
FILE *filein;
s[MAXCHAR];
char *p1,*p2;
int i=0;
if((filein=fopen("filein.txt","r"))==NULL){
printf("can`t open filein.txt");
return -1;
}
while((s[i++]=(fgetc(filein))!=EOF)&&i
p1=strchr(s,' ');
*p1='\0';
++p1;
p2=strchr(p1,'\t');
*p2='\0';
++p2;
abc.a=atoi(s);
abc.b=atof(p1);
strcpy( abc.c,p2);
memset(s,0,MAXCHAR);
i=0;
fclose(filein);
return 0;
}