使用递归打印分段号
Printing section numbers using recursion
我有一个函数void numbers(ostream& outs, const string& prefix, unsigned int levels);
,它将输出输出到ostream输出
输出由字符串前缀后跟形式为1.1的"节号"组成。1.2点。1.3点。等等。levels参数决定了区段号有多少个级别。例如,如果levels为2,则分段号的形式为x.y。如果levels为3,则分段号的形式为x.y.z。每个级别允许的数字始终为'1'到'9'。例如,如果prefix是字符串"THERBLIG"并且level是2,那么该函数将以打印
开始:THERBLIG1.1 .
THERBLIG1.2 .
THERBLIG1.3 .
,并以打印结束:
THERBLIG9.7 .
THERBLIG9.8 .
THERBLIG9.9 .
当级别达到零时发生停止情况(在这种情况下,前缀本身只打印一次,之后不打印其他内容)。
当level为2时,我当前的代码正确地打印出所有的部分,但是当level为3时,它没有。我如何使我的代码更加动态和通用,以便它可以采取任何数量的级别?(水平是3时,输出应该1.1.1,1.1.2,1.1.3…1.2.1 . .)。
下面是我的代码:
void numbers(ostream& outs, const string& prefix, unsigned int levels){
if (levels > 1){
for (int i = 1; i <= 9; i++){
for (int k = 1; k <= 9; k++){
string s = prefix + char('0' + i);
s += '.';
s += char('0' + k);
s += '.';
outs<<s<<endl;
}
}
numbers(outs, prefix, levels - 1);
}
else{
levels = 0;
if (levels == 0){
cout<<prefix<<endl;
}
}
}
我的建议使用回溯:
#include <iostream>
#include <string>
using namespace std;
void numbers(ostream& outs, const string& prefix, unsigned int levels){
if (levels == 0) {
outs << prefix << endl;
return;
}
for (int i = 1; i <= 9; i++){
string dot = (levels == 1 ? "" : "."); //handle the case the lowest level
string s = prefix + std::to_string(i) + dot;
numbers(outs, s, levels - 1);
}
}
int main() {
int level = 3;
numbers(cout, "", level);
return 0;
}
试试这个
#include <iostream>
#include <string>
using namespace std;
void numbers(string& outs, const string& prefix, unsigned int levels){
if (levels >= 1){
for (int k = 1; k <= 9; k++){
string tmpOut = outs + char('0' + k) + ".";
numbers(tmpOut, prefix, levels - 1);
}
}
else{
outs.erase(outs.size() - 1, 1);
cout<<prefix<< outs << endl;
}
}
int main()
{
string out;
numbers(out, "prefex ", 2);
numbers(out, "prefex ", 3);
return 0;
}
后面我会描述
相关文章:
- 如何在c ++中打印给定桶号的所有元素unordered_set?
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 为什么重载运算符<<打印特征类成员会导致段错误?
- 错误:变量或字段'PrintEntity'声明无效无效打印实体(实体 e);
- CRT 不打印内存泄漏的行号
- 如何打印通话函数的行号和文件名而不是log.cpp
- 如何打印以下代码段的 qlist
- GDB 在程序运行时打印文件名行号
- C 如何用逗号(而不是点)在文件中打印一个双小数号
- 为什么 cout 打印"2 + 3 = 15"这段代码?
- 访问程序中的符号表以打印结构的字段名称
- 我的函数返回的是打印到控制台,它只会在我调用它时每隔一段时间C++
- GDB 打印结构的字段
- 如何使用 valgrind 3.7.0 打印内存泄漏根本原因的行号
- 为什么这段代码不能正常打印数字?
- 单引号(撇号)要打印到屏幕C++的字母
- 这段代码是如何打印5的?
- 为什么这段代码打印0到297,而不是0到大于297的值?
- 如何覆盖一般malloc,所以我得到行号打印在内存泄漏打印输出