我编写了一个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;”中。如何获取代码以反转给定字符串的所有子字符串。
答案 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);
}