C程序中Char数组的子集

时间:2017-10-14 23:42:24

标签: c arrays

我编写了一个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);
}

假设我的输入是&#34; aabbcc&#34;。我的子串将是a,aa,aabb,....等。 但是,字符串的反转只发生在我自己的单词“#ab; aabbcc&#34;”中。如何获取代码以反转给定字符串的所有子字符串。

1 个答案:

答案 0 :(得分:1)

首先,由于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");
        }
    }
}

否则您需要将子字符串存储在缓冲区中并将其发送到您的反向函数,因为您正在修改orignal字符串 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);
}