我正在写一个理性的类,其中以下必须是可接受的输入形式:
3 / 4,1.4545,(7/8,(7/8),7/8),或者甚至((((((5/4))),我的代码应该将其重写为5/4让构造函数接受。
此时我将一个字符串参数传递给一个构造函数,该构造函数分别调用formatStringNumerator()和formatStringDenominator();
我还没有得到小数,但到目前为止,左边有一个括号的输入将分子值设置为0。我认为错误是"("在数字之前。我已经评论了我试图将括号移到左边,但他们只是赢了但是没有消失。我&# 39;我试图使用substr()作为替代,但只是在我这样做时出错。另外,当我打印出find()值时,我得到一些大数字,[18446744073709551615]当参数找不到时?我是在印象中它应该返回-1(假?)如果没有找到。
在第一个注释中,erase()应该删除字符串中的第一个字符,作为括号,但它不会自行删除,并且从字符串到int的转换变得混乱,将其默认为0我之前提到过?
int formatStringNumerator(string &rational){
string tmp;
int numerator;
// if(rational.find("(") != false){
// rational.erase(0, 1);
// } //This should have deleted an open parenthesis
if(rational.find("/") != false){
tmp = rational.substr(0, rational.find("/"));
cout << "\n" << tmp << endl; //cout to test if ran
} //Should assign numbers leading to the symbol("/") to tmp
istringstream is;
is.str(tmp); //Numerator should have int value with parenthesis removed
is >> numerator;
return numerator;
}
int formatStringDenominator(string &rational){
string tmp;
int denominator;
if(tmp.find("/") != false){
tmp = rational.substr((rational.find("/")+1));
} //assign value after symbol to tmp
// if(tmp.find(")") != false){
// tmp.erase(tmp.find(")")); //Successfully removes parenthesis
// cout << "\n" << tmp << endl; //Bad condition in if statement?
// } //cout to test if ran
istringstream is;
is.str(tmp);
is >> denominator;
return denominator;
}
答案 0 :(得分:0)
你展示的功能是错误的。类find
的成员函数std::string
不返回bool值。它返回类型为std::string::size_type
的对象。例如,第一个函数可以按以下方式查找
int formatStringNumerator( const string &rational )
{
string tmp( rational, 0, rational.find("/") );
tmp.erase( 0, tmp.find_first_not_of( "(" ) );
return ( tmp.empty() ? 0 : std::stoi( tmp ) );
}
以下是使用函数
的示例#include <iostream>
#include <string>
using namespace std;
int formatStringNumerator( const string &rational )
{
string tmp( rational, 0, rational.find("/") );
tmp.erase( 0, tmp.find_first_not_of( "(" ) );
return ( tmp.empty() ? 0 : std::stoi( tmp ) );
}
int main()
{
std::string s( "((((12/15" );
std::cout << formatStringNumerator( s ) << std::endl;
std::string t( "((((12" );
std::cout << formatStringNumerator( t ) << std::endl;
std::string u( "((((" );
std::cout << formatStringNumerator( u ) << std::endl;
return 0;
}
输出
12
12
0