2017-10-14 2 views
1

Ich habe ein C-Programm geschrieben, um die Teilmenge von Strings umzukehren. Und ich bin nicht in der Lage, die Ausgabe zu bekommen.Subset von Char Array im C-Programm

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
main() 
{ 
    int i,j,n,k, size; 
    char a[10]="aabbcc"; 
    i=0; 
    n=strlen(a); 
    for(i=0;i<n;i++) 
    { 

     for(j=i;j<n;j++) 
     { 
      for(k=i;k<j+1;k++) 
      { 
       printf("%c",a[k]); 
       size = strlen(a); 
       reverse(a[k], 0, size - 1); 
       printf("The string after reversing is: %s\n", a); 
      } 
      printf("\n"); 
     } 
    } 
    getch(); 
} 

void reverse(char str1[], int index, int size) 
{ 
    char temp; 
    temp = str1[index]; 
    str1[index] = str1[size - index]; 
    str1[size - index] = temp; 
    if (index == size/2) 
    { 
     return; 
    } 
    reverse(str1, index + 1, size); 
} 

Angenommen, mein Eingang ist "aabbcc". Meine Teilstrings werden a, aa, aabb, .... usw. sein. Aber das Umkehren der Saite geschieht nur für mein Inout-Wort "aabbcc". Wie bekomme ich den Code, um alle Teilstrings der gegebenen Zeichenfolge umzukehren.

+0

Dies sollte nicht einmal ohne Warnung kompilieren. Das erste Argument von 'reverse()' soll ein Array sein, aber 'reverse (a [k], 0, size-1)' übergibt ein einzelnes 'char' als erstes Argument. – Barmar

+0

Wenn Sie an einer Teilzeichenfolge arbeiten möchten, müssen Sie sie in ein temporäres Array kopieren. Andernfalls ändern Sie die ursprüngliche Zeichenfolge, und zukünftige Schleifen können das Original nicht wiederherstellen. – Barmar

+0

ja !! Aber wie übertrage ich die aktuelle Teilzeichenfolge, um sie umzukehren. Welche Änderungen sollte ich machen um zu arbeiten? –

Antwort

0

Erstens, dieser Code wird nicht kompiliert wegen Syntaxfehler (s) als Barmar erwähnt.

Zweitens Wenn Sie nur alle Teilzeichen drucken möchten, und es sollte umgekehrt diese leichte Aufgabe sein

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

int main() 
{ 
    int i,j,n,k, size; 
    char a[10]="aabbcc"; 
    i=0; 
    n=strlen(a); 
    for(i=0;i<n;i++) 
    { 

     for(j=i;j<n;j++) 
     { 
      printf("substring="); 
      for(k=i;k<j+1;k++) 
      { 
       printf("%c",a[k]); 
      } 
      printf("\n"); 
      printf("reverse="); 

      // only reverse the loop! 
      for(k=j; k>=i;k--) 
      { 
       printf("%c",a[k]); 
      } 
      printf("\n"); 
     } 
    } 
} 

sonst müssen Sie die Teil in einem Puffer speichern und es zu einem Reverse-Funktion zu schreiben, da Sie sind Ändern der ursprünglichen Zeichenfolge a.

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

void reverse(char str[], int index, int size); // you need to declare you function first 

int main() { 
    int i,j,n,k, size; 
    char a[10]="aabbcc"; 
    i=0; 
    n=strlen(a); 
    for(i=0;i<n;i++) 
    { 
     for(j=i;j<n;j++) 
     { 
      char buffer[10]; 
      int buffer_index = 0; 
      for(k=i;k<j+1;k++) { 
       buffer[buffer_index++] = a[k]; 
      } 
      buffer[buffer_index] = 0; // add buffer terminating 
      printf("current substring=%s\n", buffer); 

      // reversing current substring 
      size = strlen(buffer); 
      reverse(buffer, 0, size - 1); // passing copy of substring instead of a 
      printf("The string after reversing is: %s\n", buffer); 
      printf("\n"); 
     } 
    } 
} 

void reverse(char str[], int index, int size) { 
    char temp; 
    temp = str[index]; 
    str[index] = str[size - index]; 
    str[size - index] = temp; 
    if (index == size/2) 
    { 
     return; 
    } 
    reverse(str, index + 1, size); 
} 
+0

Danke. Das hat perfekt für mich funktioniert. –