C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含这个头文件。 istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入输出操作。 istringstream的构造函数原形如下: istringstream::istringstream(string str); 该构造函数只能拆分以空格分割的字符串,其余分隔符需要先进行转换
示例代码:
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
string str="1202,12345,chaihdoiawh";
for(int i=0; i<str.size();i++)
{
if(str[i] == ',')
{
str[i] = ' ';
}
}
istringstream output(str);
string outputLine;
while(output>>s)
{
cout<<outputLine<<endl;
}
}
运行结果:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char sU[]="http://***.***.***publicservice?restype=geotiff&action=get&path=202112355.tif&encoding=utf-8";
char *getUrlPath(char *sUrl,char *UrlPath) {
char splite[1024],*UrlName,append[80];
int Length,num,sNum;
static char finish[80];
finish[0]=0;
UrlName=strchr(sUrl,'?');
if (!UrlName) return finish;
strncpy(splite,UrlName,1023);
splite[1023]=0;
splite[0]='&';
append[0]='&';
strncpy(append+1,UrlPath,77);
append[78]=0;
strcat(append,"=");
Length=strlen(append);
UrlName=strstr(splite,append);
if (!UrlName) return finish;
UrlName=UrlName+Length;
num=0;
while (1) {
if (UrlName[num]=='&') {UrlName[num]=0;break;}
if (UrlName[num]==0) break;
if (num>=79) {UrlName[num]=0;break;}
num++;
}
if (num>0) {
strcpy(append,UrlName);
Length=0;
UrlName=append;
while (1) {
k=sscanf(UrlName,"%%%2x",&num);
if (1==k)
{
finish[Length++]=(char)num;
UrlName+=3;
}
else if (0==sNum) {
finish[Length++]=UrlName[0];
UrlName++;
} else break;
}
finish[L]=0;
}
return finish;
}
int main() {
printf("path=%s\n",getUrlPath(sU,"path"));
return 0;
}
|