mghelp
Goto Top

Buchstaben Verschiebung von variable also "uftu" zurück nach "test"

#include <stdio.h>
#include <string.h>
int main()
{
char text[101];
unsigned int i;
printf("Eingabe Text (bis zu %i Zeichen):\n", sizeof (text)-1);
gets(text);
printf("\nDer Text lautet\n%s\n\n", text);
for (i=0; i<strlen(text); i++)
{
{
text[i]++;
text[i]='a';
}
}

printf("Der Text lautet codiert\n%s\n", text);
getchar();
return 0;
}

Also wenn ich "test" eingebe bekomme ich "uftu" raus (später will ich den wert von einer textdatei einlesen und uftu nach test wieder zurück verschiebt

Danke mghelp

Content-ID: 46350

Url: https://administrator.de/contentid/46350

Ausgedruckt am: 15.11.2024 um 03:11 Uhr

filippg
filippg 09.12.2006 um 15:27:25 Uhr
Goto Top
Hallo,

... das ist ja schön. Und, hattest du auch eine Frage, oder wolltest du uns nur mitteilen, dass du Text verschieben kannst?

Filipp
Biber
Biber 09.12.2006 um 15:54:54 Uhr
Goto Top
@filippg
Da hab ich auch gegrübelt, was denn nun die Frage ist...

Ich denke, er hat es HINverschoben und will es wieder ZURÜCKverschieben. Ist aber nur eine Vermutung.
Wie hatten mal einen ähnlichen Thread: "Ich habe mit C in die Registry geschrieben - wie kann ich das wieder lesen?" oder so ähnlich.
BTW, hast Du mal einen Blick auf StarUML geworfen?

@mghelp
Wenn Du irgendwelche Strings transformieren willst, solltest Du dazu eine Funktion verwenden, wenn der Algorithmus simpel genug ist, um VOR/RETOUR zu transformieren.
Meinetwegen auch zwei Funktionen (schiebhin()/schiebher()), falls es mal komplexer werden sollte.

Beispiel:
#include <stdio.h>
#include <string.h>
#define VOR 1
#define RETOUR -1
void verschieb(char* in, char* out, int diff); 

int main()
{
char text[101];
char schiebtext[101];
printf("Eingabe Text (bis zu %i Zeichen):\n", sizeof (text)-1);  
gets(text);
printf("\nDer Text lautet\n%s\n\n", text);  
verschieb(text, schiebtext, VOR);
printf("Verschobener Text VOR lautet \n%s\n", schiebtext);  
verschieb(schiebtext, schiebtext , RETOUR);
printf("Verschobener Text RETOUR lautet \n%s\n", schiebtext);  
getchar();

return 0;
}
void verschieb(char*  in, char *out, int diff) {
int i;     
for (i=0; i<strlen(in); i++) {
       out[i] = in[i]+diff;
out[strlen(in)]='\0';     
}
}

Gruß
Biber
mghelp
mghelp 09.12.2006 um 16:41:32 Uhr
Goto Top
Danke für eine Antwort.

Meine Frage war "Ich habe Buchstabenverschoben und wollte dies rückgängig machen".

Es hat sich jetzt erledigt, weil "Biber" schon das hat was ich suche. face-wink

Es tut mir leid, weil ich mich immer so ungenau ausdrücke.
Oder so verschachtelt schreibe.

Danke mghelp
filippg
filippg 09.12.2006 um 20:11:59 Uhr
Goto Top
@filippg
BTW, hast Du mal einen Blick auf StarUML
geworfen?
Nein, aber es steht auf meiner Liste mit Software, die ich mir mal anschauen will. Ich hatte mir mal die Screenshots angeschaut (finde ich immer schön, wenn's viele davon hat) und die Features gelesen, da schaute es mir dann für meine Aufgabe schon wieder viel zu dick aus. Aber wenn ich mal wieder wirklich UML modellieren will (und nicht nur zeichnen) werde ich das mal testen.

Meine Frage war "Ich habe Buchstabenverschoben
und wollte dies rückgängig machen".
Hm... ohne jetzt irgendwem auf die Füsse treten zu wolle, aber... eine Frage ist das nun eindeutig auch nicht.

Filipp
Guenni
Guenni 10.12.2006 um 17:23:34 Uhr
Goto Top
@mghelp

Hi,

verschieben oder verschlüsseln kann man auch mit dem
überladenen XOR-Operator.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
// Klasse String
class CString{
 private:
         char *string;
         int size; 
 public:
        CString(); //Standard-Konstruktor
        CString(const char*); //Konstruktor mit Initialisierung
        CString& operator^(const char*); //Xor-Operator überladen
        void CString_Print(); // Ausgabe string
        ~CString(); //Destruktor
};
// Implementierung der Methoden
CString::CString(){
 string=0;
 size=0;
}

CString::CString(const char *s){
 size = strlen(s);
 string = new char[size + 1];
 strcpy(string, s);
}

CString& CString::operator^(const char *k){
 int i,j,l;
 l=strlen(k);  
 for(i=j=0;i<size;i++,j=++j%l){
  string[i]^=k[j];
 }
 return *this;      
} 

void CString::CString_Print(){
 cout << string << endl;
}

CString:: ~CString()
{
  delete string;
}

// Testprogramm 
int main(int argc,char *argv){
 char input[100];
 char *key="12345"; // oder abcde, wdlkv, halt irgendwas  
 puts("Geben Sie ein(en) Wort(Text) ein:");  
 gets(input);
 CString s=CString(input); // Eingabe an neues Objekt übergeben
 puts("Text: ");   
 s.CString_Print(); // Eingabe am Bildschirm ausgeben
 s ^ key; //Text verschlüsseln
 puts("Verschluesselt: ");  
 s.CString_Print(); // Verschlüsselt ausgeben
 s ^ key; // Text entschlüsseln
 puts("Entschluesselt: ");  
 s.CString_Print(); // Entschlüsselt ausgeben
 getch();
 return 0;
}

Nebeneffekt: Je nach key/input kann es passieren, dass auch
nichtdruckbare Zeichen ausgegeben werden.

Dann gibt’s bei der Ausgabe schonmal einen Zeilenvorschub
oder ein Piep aus dem Lautsprecher.

Grüße
Günni