同様の文字を削除するためのアルゴリズムコードを書いています。例の場合。入力文字列が「abb」の場合、出力は「a」であり、「abcddbf」文字列の場合、出力は「acf」である必要があります。
以下に示すようにいくつかのコードを書きましたが、セグメンテーション障害を取得する方法がいくつかあり、問題のあるポイントを見つけることができません。
コード :
#include<stdio.h>
#include<string.h>
char *remove_adjecent_string(char *in,int count)
{
int i=0;
int j=0;
int flag = 0;
int total = strlen(in);
static char *output = NULL;
if(count == 0)
{
output=(char *)malloc(sizeof(char)*total);
if(output == NULL)
{
return NULL;
}
for(i=0,j=0;i<=total;i++)
{
if(in[i] != '*')
{
output[j]=in[i];
j++;
}
}
return (char *)output;
}
for(i=0;i<=count;++i)
{
printf("In loop i :%d count :%d \t",i,count);
printf("Before comparition in[i] = %c , in[count] = %c \t",in[i],in[count]);
if(in[i] == in[count])
{
printf("Same found in[%d] = in[%d] = %c",i,count,in[i]);
in[i]='*';
flag = 1;
}
printf(" Next loop i = %d\n",++i);
}
printf("Before Recursion \n");
output =remove_adjecent_string(in,(count-1));
return (char *)output;
}
int main()
{
char *input;
char *output;
int i=0;
input = (char *)malloc(sizeof(char)*10);
if(input == NULL)
{
return;
}
output=(char *)malloc(sizeof(char)*10);
if(output == NULL)
{
return;
}
input = "abbb";
int count = -1;
count=strlen(input);
output=remove_adjecent_string(input,(count-1));
printf("Input String = %s\n",input);
printf("Output String = %s\n",output);
}
不具合のあるケースを見つけるのを手伝ってください。