2012-05-23 53 views
1

我试图将表达式“5 + b * 18”转换为“5 + 16.89 * 18”。我的问题是在while循环中。我设法删除了空格。双C++中的字符串

我的代码:

double number = 16.89; 
size_t found; 
ostringstream converted; 
string str ("5 + b * 18"); 

str.erase(remove(str.begin(),str.end(),' '),str.end()); 

found = str.find_first_of (VALID_CHARS); 

while (found != string::npos) 
{   
    converted << fixed << setprecision (8) << number;   
    str.insert(found, converted.str());            
    found = str.find_first_of (VALID_CHARS,found + 1); 
} 

谁能帮助我?

Ty

回答

1

insert()将在插入文本后将字符串内容向右移,但不会删除给定位置处的字符。你应该使用replace(),指定一个大小(只替换一个字符)

+0

Ty dude!我修好了它。 – tiggares

0

使用sprintf。将大多数基本类型转换为字符串非常好。

int main() 
{ 
    double number = 16.89; 
    char buffer [50]; 
    sprintf(buffer, "5 + %f * 18",number); 
} 
+0

好奇,为什么我的答案-1没有理由... – kevlar1818

+0

我没有给downvote,但我怀疑它是因为'sprintf'要求你做自己的内存管理,这是相当容易出错的。对于这类问题的一个好的和类型安全的变体,我会建议'boost :: lexical_cast'(假设海报想要使用Boost库的一部分)。 – Gnosophilon

+0

唯一容易出错的是人为错误。如果它更加优雅和快速,我会采取“容易出错”的方式。我也赞同Boost的实施。不用说,我认为我的回答在任何方面都不“有用”。 – kevlar1818

1

这功课吗?如果没有,我真的建议不要这样做自己的解析。这类已经过广泛测试的类库有专用库,如muParser