2017-10-14 15 views
1

文字列のサブセットを逆転させるCプログラムを書いています。私は出力を得ることができません。Cプログラム内の文字配列のサブセット

#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); 
} 

私の入力が「aabbcc」であるとします。私の部分文字列はa、aa、aabb、....などになります。 しかし、文字列の逆転は、私のinout単語 "aabbcc"に対してのみ起こっています。指定された文字列のすべての部分文字列を逆順にするコードを取得するにはどうすればよいですか。

+0

これは警告なしでコンパイルするべきではありません。 'reverse()'の最初の引数は配列ですが、 'reverse(a [k]、0、size-1)'は最初の引数として単一の 'char'を渡します。 – Barmar

+0

部分文字列を処理する場合は、一時配列にコピーする必要があります。さもなければ、あなたは元の文字列を変更しています、そして、将来のループはオリジナルを取り戻すことができません。 – Barmar

+0

はい!しかし、それを逆転させるために現在の部分文字列をどのように渡しますか?私はそれを働かせるために何を変えるべきですか? –

答えて

0

まず、このコードは、Barmarが述べた構文エラーのためにコンパイルされません。

第二に、あなただけのすべての部分文字列を印刷し、これは

#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"); 
     } 
    } 
} 

簡単な作業でなければなりませんが、逆にしたい場合は、あなたがしているので、それ以外の場合は、あなたが、バッファ内の部分文字列を格納し、あなたの逆関数にそれを送信する必要があります文字列を変更する

#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

ありがとうございました..これは私にとって完璧に機能しました。 –