Forum
Tipps
News
Menu-Icon

C-Programmierung

Hallo!

Frage zum Thema "Arrays und Strings" in C:

Wie schaffe ich es, einen String in umgekehrter Reihenfolge (z.B. inna statt anni) in ein anderes array zu kopieren?


Antworten zu C-Programmierung:

Mh... ca. so:

#include <stdio.h>

int main(int argc, char *argv[])
{
  char str[20] = "hallo";
  printf(str);
  printf("\n");
  strrev(str);
  printf(str);
  printf("\n");
 
  system("PAUSE");
  return 0;
}

Achso, du willst es in ein anderes Array, naja dann so:

#include <stdio.h>

int main(int argc, char *argv[])
{
  char str[20] = "hallo";
  char rev[20];
  strcpy(rev, str);
 
  printf(str);
  printf("\n");
  strrev(rev);
  printf(rev);
  printf("\n");
 
  system("PAUSE");
  return 0;
}

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Da wäre dann nur noch die Implementierung der strrev-Funktion interessant, IIRC gibts die nämlich in keiner Standardbibliothek.

Koennte insgesamt eher so aussehen:

#include <stdio.h>

char *strrev( char *s );

void main( int argc, char **argv ) {
    char buf[1024];
    char *rev;

    rev = strrev( buf );
    printf( "%s\n%s\n", buf, rev );
}

char *strrev( char *s ) {
    static char r[1024];
    int i, j, l;

    for ( l = 0; s[l] != '\0'; l++ );
    for ( i = 0, j = l - 1; i < l; i++, j-- ) r[i] = s[j];
    r[i] = '\0';
    return( r );
}
 
« Letzte Änderung: 05.01.08, 12:14:55 von Lisaa »

Interessante vorgehensweise.
Wobei bei mir (unter Windows, mit Dev-cpp) die methode strrev(const char*) existiert, und ich den Code auch erfolgreich getestet habe!

Und ich habe auch ein C Projekt benutzt und kein C++, und es als C compilieren lassen.

Naja, um es etwas anders als du zu loesen (da ich deinen Code etwas aufwendig finde) habe ich es nochmal verfasst:

#include <stdio.h>

int main(int argc, char *argv[])
{
  char str[20] = "hallo";
  char rev[20];
  int i;
 
  for(i = 0; i < sizeof(rev); i++)
        rev[i] = 0;
 
  printf(str);
  printf("\n");
  int len = strlen(str);
  for(i = 0; i < len; i++)
        rev[len - i - 1] = str[i];
 
  printf(rev);
  printf("\n");
 
  system("PAUSE");
  return 0;
}


P.S. nicht persoehnlich nehmen Lisaa, jeder hat seinen eigenen Programmierstil ;D   
« Letzte Änderung: 05.01.08, 01:05:20 von Fuxi »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Du hast recht, dein Code ist übersichtlicher. Macht aber im Prinzip genau dasselbe, d.h. strlen zählt auch bloss die Characters wie in meiner ersten for-Schleife (und IIRC ist das auch genau so implementiert) und in der Kopierschleife habe ich ne zusätzliche Variable eingeführt um nicht jedes Mal len - i rechnen zu müssen.
Einziger Kritikpunkt: Das hier

for(i = 0; i < sizeof(rev); i++)
    rev[i] = 0;
wird bei großen Strings beliebig ineffizient und ist absolut unnötig. Am Ende einmal 0 dranhängen reicht.

Ja, wuerde dann so aussehen:

rev[strlen(str)] = 0;
oder wie du es wahrscheinlich schreiben wuerdest:
rev[strlen(str)] = '\0';
oder wenn man es auf die Geschwindigkeit anlegt, dann verwendet man die "len" variable, die ja die laenge schon hat:
rev[len] = '\0';
wo man des macht is im Prinzip egal, nur muss es vor der verwendung (ausgabe) des Strings sein, sonst wuerde er je nach dem was in dem Speicher war irgendwas hinschreiben^^   
« Letzte Änderung: 05.01.08, 13:25:03 von Fuxi »

Mein Programm läuft!
Danke für eure Hilfe!

Mfg
 

Weils grade so schoen zum Thema "Strings" dazu passt:
Wie kette ich 2 Strings aneinander?

Ich meine nicht, einfach nur die 2 Arrays addieren. Sondern  z.B. bei einem Funktionsaufruf, oder einer printf Ausgabe.

In Java geht das einfach mit +:

String x = "hallo";
String xy = x + " du da"; //xy = hallo du da
Aber wie in C++, oder geht es gar nicht und man muss sich ne Funktion dafuer schreiben?

P.S. ich rede nicht von eigenen Methoden, sondern von Vorhanden. Natuerlich koennte man es mit einer Beliebiger  Anzahl an Parametern machen (bei eigenen Methoden) und dann einfach die aneinaner haengen.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Mit "richtigen" Strings (aus der Standardbibliothek) geht das auch so:

std::string a = "hallo";
std::string b = a + " du da";
Wenn du char* hast, gibt es die Funktion strcat( char *dest, char *source). (Eine Kopie von) source wird an dest drangehaengt:
char dest[255] = "hallo" ;
char source[30] = " du da" ;
strcat( dest, source );
   

« Tilgungsplan in C++ programmierenMit Batch Datei Text Datei erzeugen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...

QR-Code
QR-Codes, die Abkürzung für "Quick Response Codes", sind eine Form von zweidimensionalen Barcodes. Damit lassen sich Informationen schnell und effizient speiche...