Program zmieniający znaki..?

0

Cześć potrzebuje pomocy w napisaniu programu zamieniającego ze sobą znaki parami.
Np. ABCDEFGH-BADCFEHG

1

Nie będzie to co prawda w C++ ale może cię to natchnie i sobie przepiszesz:

public class Main {
    public static void main(String[] args) {

        String text = "ABCDEFGH";
        System.out.println("Tekst wejściowy: " + text);
        System.out.println("Tekst wyjściowy: " + characterRotator(text));
    }

    static String characterRotator(String text) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            if (i % 2 != 0) {
                stringBuilder.append(text.charAt(i)).append(text.charAt(i - 1));
            }
        }
        return stringBuilder.toString();
    }
}

Wynik:

Tekst wejściowy: ABCDEFGH
Tekst wyjściowy: BADCFEHG

Na 99% da się to napisać lepiej.

PS Trzeba uwzględnić sytuację, kiedy tekst będzie nieparzysty.

Tak na szybko to powinno rozwiązać problem:

            if(i % 2 == 0 && i == text.length() - 1){
                stringBuilder.append(text.charAt(text.length() - 1));
            }
Tekst wejściowy: ABCDEFG
Tekst wyjściowy: BADCFEG
2

@SoideR: Co już masz, gdzie szukałeś rozwiązania, dlaczego nie działało, etc...? Co zrobić w przypadku wejścia o nieparzystej długości?

1

std::swap, pętla for(a nawet sama pętla for wystarczy). Tak najbardziej prymitywnie. Reszta jak coś przedstawisz.

2
#include <iostream>

using namespace std;

string swapChars(const string &input) {
    string result(input);
    for (int i = 1; i < input.size(); i += 2) {
        swap(result[i], result[i - 1]);
    }
    return result;
}

void test(const string &input, const string &expected) {
    string actual = swapChars(input);
    if (actual == expected) {
        cout << "Test for [" << input << "] - OK\n";
    } else {
        cout << "Test for [" << input << "] - failed, expected: " << expected << ", actual: " << actual << "\n";
    }
}

int main() {
    test("", "");
    test("a", "a");
    test("ab", "ba");
    test("abc", "bac");
    test("abcd", "badc");
    test("abcde", "badce");
    test("aa", "aa");
    return 0;
}

https://ideone.com/bVikh9

1 użytkowników online, w tym zalogowanych: 0, gości: 1