2017-11-26 4 views
1

Hier ist mein Code. Für ein Wort mit mehr als 3 Alphabeten in o/p werden Müllwerte generiert.Ich habe einen Code geschrieben, um eine Zeichenfolge umzukehren. Aber in der Ausgabe erzeugt es etwas Müll. Warum?

#include<stdio.h> 
#include<stdlib.h> 

int main(){ 
    char a[50],b[50]; 
    gets(a); 
    puts(a); 
    int len,i,j; 
    i=0; 
    while(a[i]!='\0'){ 
     i++; 
    } 
    printf("Length: %d",i); 
    //reverse 
    len = i; 
    j=len-1; 
    for(i=0;i<=len-1;i++){ 
     printf("\ni=%d j=%d",i,j); 
     b[i]=a[j]; 
     j--; 

    } 
    printf("\n___REVERSED TEXT___\n"); 
    puts(b); 


} 
+2

Verwenden Sie keine 'gets()' je; es kann nicht sicher verwendet werden. –

+0

Haben Sie die umgekehrte Zeichenfolge null beendet? Ich denke nicht. –

+0

Nicht verwandt mit Ihrem Problem, aber Sie wissen, dass 'i <= len-1 'ist das gleiche wie' i

Antwort

2

Für den Anfang weder Erklärung aus dem Header <stdlib.h> wird im Programm verwendet. So kann diese Richtlinie

#include<stdlib.h> 

möglicherweise entfernt werden.

Nach dem C-Standard der Funktion main ohne Parameter wird wie

int main(void) 

Die Funktion deklariert werden gets unsicher ist und nicht mehr durch den C-Standard unterstützt. Verwenden Sie stattdessen die Funktion fgets.

Wenn die im Array a gespeicherte Zeichenfolge in das Array b kopiert wird, sollte die abschließende Null ebenfalls an das Ende der Ergebniszeichenfolge kopiert werden.

Das Programm kann sehen die folgende Art und Weise

#include <stdio.h> 

#define N 50 

int main(void) 
{ 
    char a[N], b[N]; 

    fgets(a, sizeof(a), stdin); 

    size_t length = 0; 

    while (a[length] != '\0' && a[length] != '\n') ++length; 

    a[length] = '\0'; 

    puts(a); 

    size_t i = 0; 

    for (; i < length; i++) b[i] = a[length - i - 1]; 
    b[i] = '\0'; 

    printf("\n___REVERSED TEXT___\n"); 
    puts(b); 

    return 0; 
} 

Sein Ausgang wie

Hello, World! 
Hello, World! 

___REVERSED TEXT___ 
!dlroW ,olleH 
aussehen könnte
+0

Warum nicht '(für i = 0, j = Länge; i

+0

@ DavidC.Rankin Nach dem Code in der Frage versucht er, eine Zeichenfolge zu kopieren und umkehren, anstatt "an Ort und Stelle" umzukehren. –

0
#include<stdio.h> 
#include<string.h> 

int main(void){ 
    char a[50],b[50]; 

    printf("\nWhat is the word?"); 
    scanf("%s", a); fflush(stdin); 
    int j; 

    printf("Length: %lu",strlen(a)); 
    for(j = strlen(a) - 1; j >= 0; j--){ 
     b[strlen(a) - 1 - j] = a[j]; 
    } 
    printf("\n___REVERSED TEXT___\n"); 
    printf("\n%s", b); 
} 
  • Verwendung Funktion strlen von string.h die Größe der Zeichenfolge zu erhalten;
  • die für geht vom Ende bis zum Anfang der Zeichenfolge ein Füllen der Zeichenfolge b
Verwandte Themen