Даны символы s1,s2,... Известно, что символ s1 отличен от пробела и что среди s2,s3,... имеется хотя бы один пробел. Рассматриваются s1,...,sn - символы, предшествующие первому пробелу (n заранее неизвестно). Преобразовать последовательность s1,..., sn: удалив из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (например, ab+0.1973-1.1 преобразуется в ab+0.19-1.1);
#include <string.h> // strcat
#include <stdio.h> // printf
#include <ctype.h> // isdigit
//270Ã
char* get_string(char* str, int a);
int main()
{
int l;
char str[256];
fgets(str, sizeof str, stdin);
char* res = get_string(str, strlen(str));
if (res)
{
printf("res=%s", res);
free(res);
}
else
{
printf("Error. Spacebar can't be first digit.");
}
return 0;
}
char* get_string(char* str, int a)
{
if (str[0] == ' ') //
{
return NULL;
}
int i = 0, count = 0, bool = 0;
unsigned index = 0;
char* result = malloc(a); //
for (int i=0; i <= a; i++)
{
if (i!=0 && str[i] == ' ')
break;
else if (str[i] == '.')
{
bool = 1;
result[index] = str[i];
index += 1;
}
else if (isdigit(str[i]))
{
if (bool == 1)
{
count += 1;
if (count < 3)
{
result[index] = str[i];
index += 1;
}
}
else
{
result[index] = str[i];
index += 1;
}
}
else
{
bool = 0;
result[index] = str[i];
index += 1;
}
}
str[a] = '\0';
return result;
}
Данный код выполняет следующее: строку ab+0.16516=0.123 превращает в ab+0.16=0. а должен в ab+0.16=0.12
Можно ли, не сильно меняя суть кода, подправить его?