2017-10-14 48 views
1

我已經編寫了一個C-程序來顛倒字符串的子集。我無法獲得輸出。C程序中Char陣列的子集

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

否則你需要的子存儲在緩衝區中,並傳送給你的反向作用,因爲你是修改原信息字符串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

謝謝..這對我來說非常合適。 –