c++ stirng类型中提取部分字符串并转为int型; 如 string="123+456/2"; int a,b,c; 操作结果 a=123;b=456;


如 string="123+456/2"; int a,b,c; char d,e;操作结果 a=123;b=456;c=2;d='+';e='/';

呃...时间不够,代码有点乱。。。。
功能更强大,支持无限地输入数据。。。。
还有浮点。。。
自己看看吧,没详细的注释。。。
结果帮你输出了,只是存的话自己去实现。。。。
再说句实话,分给少了。。。。。。。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string line="123+456/2";
void separate(string);
separate(line);
return 0;
}

void separate(string line)
{
string DELIM="+-*/=()";
string NUM="1234567890";
string num;
vector<float> coll1;
vector<char> coll2;
string::size_type begidx,endidx,index;

begidx=line.find_first_of(NUM); //////////////////////////
while(begidx!=string::npos)
{
endidx=line.find_first_of(DELIM,begidx+1);
if(endidx==string::npos)
{
num=line.substr(begidx);
coll1.push_back(atof(num.c_str())); //此段用于获取字符串中的数据并转换成浮点型顺序加入coll1容器
break;
}
else
{
num=line.substr(begidx,endidx-begidx);
coll1.push_back(atof(num.c_str()));
begidx=line.find_first_of(NUM,endidx+1); ////////////////////////////
}
}

index=line.find_first_of(DELIM); ////////////////////////////
while(index!=string::npos)
{
int i=static_cast<int>(index); //此段用于获取字符串中的运算符顺序加入coll2容器
coll2.push_back(line[i]);
index=line.find_first_of(DELIM,index+1); ///////////////////////////
}

for(int i=0;i<coll1.size();++i)
cout<<coll1[i]<<" ";
cout<<endl;
for(int j=0;j<coll2.size();++j)
cout<<coll2[j]<<" ";

}
string没有这个功能。你想让string有读文识字的能力呀!string还没有这么强大。呵呵~
这得涉及编译原理。对于算术表达式,可以进行词法分析,再利用算符优先,进行语法分析。
一般数据结构书中会有这个例子,因为它要用到堆栈。
回车或者空格就行了
具体程序如下
#include <iostream>
#include <string>
using namespace std;

int main()
{
char c;
string str1,str2;
cin>>str1;
c=getchar();//接收这个字符

if(c==' ')//空格
{
cin>>str2;
cout<<str1;
cout<<str2<<endl;
}
if(c == '\n')//回车
cout<<str1<<endl;
return 0;
}

不用getchar()你也可以这样
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
using namespace std;

int main()
{
string str1,str2;
cin>>str1;
getline(cin,str2);
istringstream iss (str2);
iss >> skipws >>str2;
cout<<str1<<str2<<endl;
return 0;
}
使用逆波兰算法 先转化为后缀表达式 然后计算后缀表达式的值


Copyright © 2009-2011 All Rights Reserved.