“填充变量”及其语法的问题

问题描述 投票:0回答:1

所以我试图解决过去奥林匹克竞赛的一个问题,你基本上采用一个字符串,即 HLOEL- 和一个数字 P=3,它输出 HELLO-,它的工作原理是将字符串的字母排序为组(行) P,然后获取每组的第一个字母,然后每组的第二个字母......一直到每组的最后一个字母。 H L O E L - --> (HE)(LL)(O-)=HELLO-

我的问题是,在我的代码中,我创建了一个变量“ix”,其中 i 位于 for 循环中,从而创建了 P 个变量,每个变量都是一个组,然后我放置另一个 for 循环,它逐列进行处理,以便输出正确的结果字符串在末尾。但它只需要第一组 (ix, i=1) 并输出该组中的字母。

请记住,我不想要一般问题的解决方案,而只是修复我的代码。

#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>

using namespace std;

int main() {
    int P, i, z;
    string S, L;

    cin >> P >> S;

    for (i = 1; i <= P; i++) {
        string ix = S.substr(0, P);
        S.erase(0, P);
       
        for (z = P; z >= 1; z--) {
            i = P - z + 1;
            cout << ix.at(P - z) <<;
        }
    }
}

输入: 3 HLOEL-

预期输出: 你好-

实际产量: 赫洛

c++
1个回答
0
投票

虽然您的代码无法编译,但很明显您对问题的思考过多。根本不需要生成或访问子字符串。

读入初始字符串后,您只需通过几个循环对其进行迭代即可。

从索引

0
开始,打印第一个字母,然后递增
P
。现在就这样做,但从逐渐深入字符串开始。

void print_string(int p, std::string s) {
    for (int i = 0; i < p; i++) {
        for (int j = i; j < s.length(); j += p) {
            std::cout << s[j];
        }
    }
    std::cout << '\n';
}
© www.soinside.com 2019 - 2024. All rights reserved.