Cześć potrzebuje pomocy w napisaniu programu zamieniającego ze sobą znaki parami.
Np. ABCDEFGH-BADCFEHG
0
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;
}