在 C++ 中递归地从十进制到八进制。以 std::string 格式输出
Decimal to Octal recursively in C++. Output in std::string format
我正在尝试在 C++ 中递归地将十进制整数转换为八进制字符串。我尝试了以下代码但没有成功。辅助函数 to_string 本身就很好用。问题似乎出在递归函数调用上。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string to_string(long num)
{
ostringstream os;
os << num;
return os.str();
}
string dec_2_oct(long dec)
{
if (dec == 0)
{
string s = "";
return s;
}
return dec_2_oct(dec / 8) + to_string(dec % 8);
}
int main() {
long dec;
cin >> dec;
string s;
s = dec_2_oct(dec);
cout << s;
}
我遇到了一些看起来很讨厌的错误。
Compiling failed with exitcode 1, compiler output:
prog.cpp: In function 'std::__cxx11::string dec_2_oct(long int)':
prog.cpp:21:50: error: call of overloaded 'to_string(long int)' is ambiguous
return dec_2_oct(dec / 8) + to_string(dec % 8);
^
prog.cpp:6:8: note: candidate: std::__cxx11::string to_string(long int)
string to_string(long num)
^~~~~~~~~
In file included from /usr/include/c++/7/string:52:0,
from /usr/include/c++/7/bits/locale_classes.h:40,
from /usr/include/c++/7/bits/ios_base.h:41,
from /usr/include/c++/7/ios:42,
from /usr/include/c++/7/ostream:38,
from /usr/include/c++/7/iostream:39,
from prog.cpp:1:
/usr/include/c++/7/bits/basic_string.h:6264:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long double)
to_string(long double __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6255:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(double)
to_string(double __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6246:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(float)
to_string(float __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6240:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long long unsigned int)
to_string(unsigned long long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6234:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long long int)
to_string(long long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6228:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long unsigned int)
to_string(unsigned long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6223:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long int)
to_string(long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6217:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(unsigned int)
to_string(unsigned __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6212:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(int)
to_string(int __val)
^~~~~~~~~
如有任何帮助,我们将不胜感激!
尝试理解错误:
Compiling failed with exitcode 1, compiler output:
prog.cpp: In function 'std::__cxx11::string dec_2_oct(long int)':
prog.cpp:21:50: error: call of overloaded 'to_string(long int)' is ambiguous
return dec_2_oct(dec / 8) + to_string(dec % 8);
错误中的关键字是overloaded
、ambiguous
,当然还有函数本身。
当你理解这些词在C++语境中的含义时,你就会明白错误的原因。
那么您可以采用以下方法之一:
- 将函数名称从
to_string
更改为类似
my_to_string
。这是天真的方法。
- 避免在全局范围内甚至导入所有
std
命名空间
函数范围并从现在开始遵循std::function
的用法。
我正在尝试在 C++ 中递归地将十进制整数转换为八进制字符串。我尝试了以下代码但没有成功。辅助函数 to_string 本身就很好用。问题似乎出在递归函数调用上。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string to_string(long num)
{
ostringstream os;
os << num;
return os.str();
}
string dec_2_oct(long dec)
{
if (dec == 0)
{
string s = "";
return s;
}
return dec_2_oct(dec / 8) + to_string(dec % 8);
}
int main() {
long dec;
cin >> dec;
string s;
s = dec_2_oct(dec);
cout << s;
}
我遇到了一些看起来很讨厌的错误。
Compiling failed with exitcode 1, compiler output:
prog.cpp: In function 'std::__cxx11::string dec_2_oct(long int)':
prog.cpp:21:50: error: call of overloaded 'to_string(long int)' is ambiguous
return dec_2_oct(dec / 8) + to_string(dec % 8);
^
prog.cpp:6:8: note: candidate: std::__cxx11::string to_string(long int)
string to_string(long num)
^~~~~~~~~
In file included from /usr/include/c++/7/string:52:0,
from /usr/include/c++/7/bits/locale_classes.h:40,
from /usr/include/c++/7/bits/ios_base.h:41,
from /usr/include/c++/7/ios:42,
from /usr/include/c++/7/ostream:38,
from /usr/include/c++/7/iostream:39,
from prog.cpp:1:
/usr/include/c++/7/bits/basic_string.h:6264:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long double)
to_string(long double __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6255:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(double)
to_string(double __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6246:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(float)
to_string(float __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6240:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long long unsigned int)
to_string(unsigned long long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6234:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long long int)
to_string(long long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6228:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long unsigned int)
to_string(unsigned long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6223:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(long int)
to_string(long __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6217:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(unsigned int)
to_string(unsigned __val)
^~~~~~~~~
/usr/include/c++/7/bits/basic_string.h:6212:3: note: candidate: std::__cxx11::string std::__cxx11::to_string(int)
to_string(int __val)
^~~~~~~~~
如有任何帮助,我们将不胜感激!
尝试理解错误:
Compiling failed with exitcode 1, compiler output:
prog.cpp: In function 'std::__cxx11::string dec_2_oct(long int)':
prog.cpp:21:50: error: call of overloaded 'to_string(long int)' is ambiguous
return dec_2_oct(dec / 8) + to_string(dec % 8);
错误中的关键字是overloaded
、ambiguous
,当然还有函数本身。
当你理解这些词在C++语境中的含义时,你就会明白错误的原因。
那么您可以采用以下方法之一:
- 将函数名称从
to_string
更改为类似my_to_string
。这是天真的方法。 - 避免在全局范围内甚至导入所有
std
命名空间 函数范围并从现在开始遵循std::function
的用法。