2016-08-03 17 views
-2

Ich habe versucht, die Reihenfolge eines Satzes, der eine Zeichenfolge mit Zeigern enthält, umzukehren. Mein Code-Schnipsel:Umkehren der Reihenfolge eines Satzes in C

int main() 
{ 
char c[50]; 
char *ptr; 
int i=0,len; 
gets(c); 
ptr=c; 
len=strlen(c); 
for(i=len-1;i>=0;i--) 
    printf("%c",*(ptr+i)); 
return 0; 
} 

Dieser Code erzeugt eine Umkehrung der Zeichenfolge, die ich richtig eingegeben habe. Wie zum Beispiel:
Input: Wie geht es Ihnen
Ausgabe: uoy Ära woh

Aber was ich im Auge behalten war ganz anders, ich wollte nur die Reihenfolge der Wörter im Satz umkehren und nicht die exakte Wörter zum Umkehren. Zum Beispiel für den gleichen Eingang "Wie geht es Ihnen" Ich möchte, dass der Ausgang "Sie sind wie". Ich habe mir schon seit einiger Zeit den Kopf gebrochen. Gibt es etwas das ich vermisse ???

Re-EDIT: Ich möchte das umgekehrte Konzept nur mit Zeigern und Zeigern machen !!! Deshalb habe ich als neue Frage veröffentlicht !!!

Wie von einem anderen Benutzer vorgeschlagen, habe ich versucht, die strtok() -Funktion zu und meine Ausgabe funktioniert irgendwie in Ordnung, aber Müll Wert wirft .... Mit freundlicher zu diesem Zusammenhang helfen ::

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

int main() 
{ 
char c[50],d[50]; 
char *ptr,*aptr,*tok; 
int i=0,j=0,len; 
gets(c); 
ptr=c; 
aptr=d; 
len=strlen(c); 
printf("%d\n",len); 
for(i=len-1;i>=0;i--,j++) 
    *(aptr+j)=(*(ptr+i)); 
for(i=0;i<len;i++) 
printf("%c",d[i]); 
printf("\n"); 
tok=strtok(aptr," "); 
while(tok!=NULL) 
{ 
printf("%s\n",strrev(tok)); 
tok=strtok(NULL,aptr); 
} 
return 0; 
} 

und i Endlich gelandet bei der optimalsten Antwort !!!!

#include <stdlib.h> 

int main() 
{ 
char s[20][20]; 
int i=0,length=-1; 
for(i=0;;i++) 
{ 
    scanf("%s",s[i]); 
    length++; 
    if(getchar()=='\n') 
     break; 
} 
for(i=length;i>=0;i--) 
    printf("%s ",s[i]); 
return 0; 
} 
+1

Ja Sie Zeichen jedes Wortes umkehren, anstatt jedes vollständigen Wort. Das ist das Problem. – ameyCU

+0

Teilen Sie die Zeichenfolge durch Leerzeichen, und speichern Sie jedes Wort in einer Zeichenfolge, und kehren Sie die Reihenfolge der Zeichenfolgen um. – Caw

+0

Ich bin nicht vertraut mit C, aber ich sehe keinen Code für die Aufteilung in Wörter. – gcampbell

Antwort

0

drucken Zeichenfolge, wenn Sie nur nach einem spacebar oder am Anfang:

for(i=len-1;i>=0;i--) 
    if (i==0) || (*(ptr+i-1)==' ') { 
    printf("%s ",*(ptr+i)); 
    if (i!=0) 
     *(ptr+i-1)='\0'; // Cutting the next print. Attention: that changes the original string. 
    } 
return 0;