Modyfikcja łańcucha znaków

0

O quam misericors est Deus, pius et iustus!

Proszę o pomoc - tj. wskazówki jak rozwiązać następujący problem:
dane są dwie tablice oraz zmienna:

char s[6] = "ABCDEF";
char r[12];
char x = '%';

zadanie polega na napisaniu kodu, który do tablicy r przypisze zawartość tablicy s z tym warunkiem, że co drugi znak ma zostać wstawiony znak '%'.

Dla jasności - bom został posądzony o chęć uzyskania gotowca przez Deusa - proszę o wskazówki jak to zrobić. Nie mam pojęcia jak rozwiązać problem zależności indeksów jednej tablicy z indeksami drugiej.
Rozumiem, że na pozycji nieparzystej mam wstawić do tablicy r znak '%' ale jak to dalej powiązać aby nie wyjść poza indeks tablicy s?

for(int it = 0; it < 12; it++) {
     if(!(i%2))
       r[i] = z;
     else
       //???
}

Ale jak to dalej ugryźć?

Deus pomożesz? :)

0

Podpowiem ci że w C++ w pętli for możesz deklarować wiele zmiennych, wiele warunków i wiele akcji
for(warunki wstępne; warunek zakończenia; operacja kroku)
Możesz na przykład mieć

for(int i=0,j=10;i<10 && j>=0; i++, j++){}

http://ideone.com/55suA

0

po else dałbym po prostu r[i] = z; bez dodatkowych zmian w forze, no chyba że ma być to co w z + znak w następnym elemencie wtedy trzeba będzie bardziej skomplikować kod, i wtedy będzie coś takiego

for (int i=0,int j=0; i<6,j<12;i++,j=j+2)
{
     if(i%2=0)
       r[i] = s[i];
     else
     {
       r[j]=z;
       r[j+1]=s[i]
      }
}

nie sprawdzałem więc może wymagać drobnych poprawek

0

Shalom dzięki za pomoc :)
Wynikiem ma być: A%L%A

#include <iostream>
 
int main() {
        char t[4] = "Ala";
        char r[7];
        char z = '%';
 
        for(int i = 0, j = 0; i < 3 || j < 6 ;j++, i++) {
                if(!(i%2))
                        r[i] = z;
                else
                        r[j] = t[i];
        }
std::cout<<r;
}

Nie działa jak należy ale idzie w dobrą stronę chyba. Muszę się nad tym jeszcze pogłowić.

0

for(int it = 0; it < 6; it++) {

 r[2*it] = s[it];
 r[2*it + 1] = x;

}

0

Przekombinowane, ale nie mogłem się powstrzymać :)

#include <iostream>
#include <algorithm>

int main() {
    char input[] = "ABCDEF";
    char sign = '%';
    char output[13] = {0};
    
    char* pos = &input[0];
    bool sep = true;
    auto op = [&] { sep = !sep; return sep ? sign : *pos++; };
    
    std::generate(std::begin(output), std::end(output), op);
    
    std::cout << output << "\n";
}
0

Indeks wystarczy jeden, zostaw pętlę w spokoju.

zsppr napisał(a):

//???

r[i] = s[i / 2];
zsppr napisał(a):

if(!(i%2))
Czytelniej będzie jak dasz

if (i % 2 != 0)
0
for(int i = 0; i < 12; i++)
{
	if(i % 2 == 0)
		r[i] = s[i / 2];
	else
		r[i] = '%';
}

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