Προς το περιεχόμενο

Ερώτηση για C: Επανάληψη χαρακτήρων


emperor318

Προτεινόμενες αναρτήσεις

Δημοσ.

Γειά σας.

Δεν είδα αν υπάρχει παρόμοια συζήτηση, αν υπάρχει plz δώστε link :-)

 

Λοιπόν, θέλω μια διαδικασία που να κατασκευάζει ένα string (πολλών χαρακτήρων (έστω WANTED)) του οποίου οι χαρακτήρες θα είναι ίδιοι με αυτούς ενός άλλου string (λιγότερων χαρακτήρων (έστω IRON)), επαναλαμβανόμενους με τη σειρα, και αντιστοιχιζόμενους με τους χαρακτήρες ενός τρίτου string (έστω TEXT). Π.χ. αν:

 

IRON

I AM THE BLACK WIZARDS = TEXT

I RO NIR ONIRO NIRONIR = WANTED

 

Έχω:

 

FOR (I=0;I=23;I++)

{

WANTED=IRON[???]

}

 

Στο "???" κολλάω...φαντάζομαι θα είναι κάτι που θα σημαίνει:

"από 0 έως 3, και μόλις φτάσεις στο 3 ξανάρχισε από το 0, εκτός αν Ι=23", αλλά πώς το γράφω αυτό;

 

ΒΟΗΘΕΙΑ, ΕΠΕΙΓΕΙ!!! :fear:

Δημοσ.

Για να καταλάβω καλύτερα.

 

Όπου υπάρχει κενό στο text εμείς βάζουμε κενό και στο wanted. Αν δεν υπάρχει κενό αλλά χαρακτήρας, αντικαθιστούμε τον χαρακτήρα αυτόν με κάποιον χαρακτήρα από το IRON ανάλογα με το που βρισκόμαστε.

 

Αυτό θες ;

Δημοσ.

Αυτό που θες να πείς ειναι i%4 ?

 

edit: Vigenère cipher προσπαθείς να υλοποιήσεις;

 

edit2: Το loop σου ποτέ δεν θα εκτελεστεί αν δεν αλλάξεις το control statement.

 

edit3: Θα πρέπει να δεις τι θα κάνεις με τα κενά.

 

edit4: Το I δεν είναι το ίδιο με το i

 

edit5: τα {} δεν είναι απαραίτητα

 

edit6: enough!

Δημοσ.

Όπως το είπε ο ippo00, αν καταλαβαίνω σωστά την ερώτησή σου.

 

>for(int i=0;i<23;i++)
{
if(text[i]==" ") wanted[i]=" ";
else wanted[i]=iron[i%4];
}

Δημοσ.
Για να καταλάβω καλύτερα.

 

Όπου υπάρχει κενό στο text εμείς βάζουμε κενό και στο wanted. Αν δεν υπάρχει κενό αλλά χαρακτήρας, αντικαθιστούμε τον χαρακτήρα αυτόν με κάποιον χαρακτήρα από το IRON ανάλογα με το που βρισκόμαστε.

 

Αυτό θες ;

 

1) Ναι, όπου υπάρχει κενό το αφήνει όπως είναι.

2) Ναι, αυτό θελω :-)

 

Αυτό που θες να πείς ειναι i%4 ?

edit: Vigenère cipher προσπαθείς να υλοποιήσεις;

edit2: Το loop σου ποτέ δεν θα εκτελεστεί αν δεν αλλάξεις το control statement.

edit3: Θα πρέπει να δεις τι θα κάνεις με τα κενά.

edit4: Το I δεν είναι το ίδιο με το i

edit5: τα {} δεν είναι απαραίτητα

edit6: enough!

 

Α, ίσως, θα δοκιμάσω, ευχαριστώ!

Ναι Vigenere φτιάχνω, και προσπαθώ να φτιάξω το repeated key :-)

edits2..6: Ξέρω, απλώς τα έγραψα στα γρήγορα και παρέλειψα μερικά ;)

Δημοσ.

Έκανα αυτό για δοκιμή:

 

#include <iostream.h>

#include <string.h>

 

char textss[11];

char keysss[5];

char wanted[11];

 

void main()

{

int i;

 

strcpy(textss,"iamtheblack");

strcpy(keysss,"iron");

 

for (i=0;i<=12;i++)

{

wanted=keysss[i%4];

}

 

cout<<textss<<endl;

cout<<wanted<<endl;

}

 

όμως βγάζει περισσότερα χαρακτήρες στο wanted :cry:

Δημοσ.

Δοκίμασέ το έτσι:

 

>#include <iostream>
#include <string.h>

char textss[]="iamtheblack";
char keysss[]="iron";
char wanted[256];

int main()
{
  for(int i=0;i<strlen(textss);i++) wanted[i]=keysss[i%strlen(keysss)];

  std::cout << textss << std::endl;
  std::cout << wanted << std::endl;
  
  system("pause");
  return 0;
  
}

Δημοσ.
Δοκίμασέ το έτσι:

μπορείς να μην αφήσεις τα strlen εκτελούντα πολλές φορές χωρίς λόγο, αν αποθηκεύσεις αρχικά το αποτέλεσμα τους σε μεταβλητές ή αν χρησιμοποιήσεις μόνο pointers.

 

 

>
    const char *t = textss, *i = keysss;
    char *w = wanted;
    assert(*i);//assume i has at least one char
    while(*t){
            *w = *i;
            if(*(++i)==0)
                     i = keysss;
            w++;
            t++;
    }
    *w = 0;//make sure it is terminated

  • 2 εβδομάδες αργότερα...
Δημοσ.

Επανήλθα...λοιπόν, όταν το 'χα τεστάρει για ΤΕΧΤ έβαλα κάτι χωρίς κενά όμως τώρα που έβαλα κενά δίνει:

 

TEXT: IAM THE BLACK

WANTED: IRO IRO IRONI

 

Όμως εγώ ήθελα:

 

TEXT: IAM THE BLACK

WANTED: IRO NIR ONIRO

 

???

Δημοσ.

Μα έβαλα τον έλεγχο, όμως το θέμα είναι ο μετρητής, που δεν θα πρέπει να αυξάνεται μέσα στο if, δηλαδή κάτι σαν το σχόλιο:

 

>	for (i=0;i<=13;i++)
{
	if (textss[i]==' ')
	{
		wanted[i]=textss[i];
//			i=i-1;
	}
	else wanted[i]=keysss[i%4];
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...