C Zeichenkette invertieren, wie?

necoicould

Lieutenant
Registriert
Feb. 2009
Beiträge
537
Hallöle, ich sitze gerade dran und versuche eine Zeichenkette invertieren zu lassen, jedoch klappt das nicht so wie ich es will, und Vorlagen die ich online finde, scheinen mir zu kompliziert.

habe bis jetzt folgendes:

Code:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   char string[10];
   printf("Geben Sie ein Wort ein: ");
   scanf("%9s", &string[0]);
   printf("Ihre Eingabe: %s\n",string);
   return EXIT_SUCCESS;

 }

Dieser übernimmt einen string und gibt einen string aus, wie schaff ich es jedoch dass die ausgabe invertiert stattfindet...?

habe da schon eine lösung gefunden, jedoch ist sie, wie gesagt, irgendwie zu kompliziert denke ich:

http://vorhilfe.de/forum/C-string_umdrehen_mit_arrays/t132304

Hoffe ihr könnt mir weiterehelfen, grüße
 
warum zu kompliziert ist doch nur ein schleife indem das eine Array hochgezält wird und das andere runtergezählt wird.

ist doch genau das was du willst und schlussendlich die logische einfachste Lösung

und wenn nciht einfach googlen
 
necoicould schrieb:
Dieser übernimmt einen string und gibt einen string aus, wie schaff ich es jedoch dass die ausgabe invertiert stattfindet...?

Eine einfache Lösung: Du kannst das Array von hinten aus durchiterieren und die Zeichen einzeln ausgeben.
 
müsste ca. so ausschauen:

int i;
for (i=0; string!="\0"; i++) // letzten Zeichen finden
;
i--;
for (;i>0;i--)
printf ("%c"; string); // Zeichen für Zeichen ausgeben
 
Vermutlich gibt es dutzende Möglichkeiten dafür.
Du hast deinen String ja sowieso auf 11 Zeichen begrenzt, daher kannst du ihn ja einfach von string[10] aus abwärts ausgeben. Evtl. spuckt das aber Datenmüll mit aus.
Eine andere Möglichkeit, die auf das selbe hinausläuft, ist die Stringlänge mittels strlen() zu bestimmen.
 
Danke für die Antworten. Was ich bis jetzt machen oder finden konnte ist folgendes:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void StrReverse3(char*);

int main(void)
{

    char str[10];
    int temp=0;

    printf("Gebe string ein: ");
    scanf("%s", str);

    StrReverse3(str);
    printf("Reverse vom string ist: %s\n", str);

  
}


void StrReverse3(char* str)
{
    int i, j, len;
    char temp;
    i=j=len=temp=0;

    len=strlen(str);
    for (i=0, j=len-1; i<=j; i++, j--)
    {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
    }
}

Ja, ich habs nicht selber gemacht^^. Ich versuche gerade folgenden Teil zu verstehen:

Code:
 for (i=0, j=len-1; i<=j; i++, j--)
    {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
    }

Kann mir jemand netterweise erklären was da genau geschieht?
 
Nun, es ist eine for-Schleife, die so lange läuft wie i <= j ist. i ist der Counter für die Schleifendurchläufe, j ist die Länge des Strings minus 1. Nach jedem Durchlauf wird i um 1 inkrementiert und j um 1 dekrementiert.
Dadurch wird irgendwann die Abbruchbedingung für die Schleife erfüllt, weil irgendwann ist i > j.

In der Schleife wird der Char an der Stelle i des Strings in die Variable temp ausgelagert, der Char an Stelle i wird mit dem von Stelle j überschrieben und der an Stelle j wird mit dem aus temp überschrieben.
Hier wird also hauptsächlich nicht der String rückwärts ausgegeben so wie du das willst, denn das ginge auch einfacher. Es wird der String innerhalb seiner Variable umgedreht indem alle Zeichen über Kreuz vertauscht werden.
Beispielhaft an einem String mit 5 Chars:
0 gegen 4
1 gegen 3
2 gegen 2

Beim letzten Schritt passiert nix mehr, hätte man sich sparen können. Das kommt durch das i <= j. Der Schritt würde wegfallen wenn die Bedinung i < j wäre.
 
Zuletzt bearbeitet:
Muß es wirklich C sein, oder darfst du auch C++ verwenden? Falls letzteres, dann könntest du einfach std::reverse() nehmen.

Code:
#include <algorithm>
#include <string>
#include <iostream>

int main()
{
    std::string myString = "abcdefg";

    std::cout << "vorher: " << myString << std::endl;

    std::reverse( myString.begin(), myString.end() );

    std::cout << "nachher: " << myString << std::endl;
}
 
antred schrieb:
Muß es wirklich C sein, oder darfst du auch C++ verwenden? Falls letzteres, dann könntest du einfach std::reverse() nehmen.

es geht doch gerade darum, dass er lernt wie man das selbst umsetzt und nicht, wie man eine Funktion aufruft. Gerade diese kleinen Sachen sollte man am Anfang selbst machen, damit man mal in die Programmierdenke hinein kommt.
 
Zurück
Oben