Помогите с задачей на си

Нужно Разработать функцию HowMore(const S1,S2:string):integer, определяющую, на сколько больше пробелов в строке S1, чем в S2. С помощью данной функции вывести только такие строки из введенного набора, в которых пробелов по крайней мере на 3 больше, чем в предыдущей строке. Количество строк может быть любое. Уже 3 дня убил на решение, не могу придумать.

# include <stdio.h>
# include <conio.h>

int HowMore(char s1[], char s2[]) {
    int sum = 0, sum1 = 0;
    for (int i = 0; sizeof(s1)<sizeof(s2)?s2[i] != '\0':s1[i] != '\0';i++) {
        if (s1[i] == ' ') sum++;
        if (s2[i] == ' ') sum1++;
    }
    if (sum > sum1) return (sum - sum1);
    else {
        return 0;
    }
}

int main() {
    char s1[100], s2[100];
    int n;
    printf("Hi, please, enter the number of lines: ");
    scanf("%i", &n);
    for (int i=0; i <= n ; i++){
        gets(s1);
        printf("Enter next string: ");
        gets(s2);   
        if (HowMore(s2, s1) >= 3) puts(s2);
    
    }
    getchar();
}

Ответы (1 шт):

Автор решения: Harry

Я бы делал не совсем так...

int Spaces(const char *s)
{
    int count = 0;
    for(; *s; s++)
        if (*s == ' ') count++;
    return count;
}

int main()
{
    char s[2][100] = {0};
    int n, sp = 0;
    printf("Hi, please, enter the number of lines: ");
    scanf("%i", &n);
    for (int f = 0, i = 0; i <= n ; i++, f = 1 - f)
    {
        gets_s(s[f],100);
        int cur = Spaces(s[f]);
        if (cur - sp >= 3)
        {
            printf("Prev string \"%s\" has %d spaces\n",s[1-f],sp);
            printf("This string \"%s\" has %d spaces\n",s[f],cur);
        }
        sp = cur;
    }
}

Если позарез нужна HowMore, то

int HowMore(const char * s1, const char * s2) { return Spaces(s1) - Spaces(s2); }

P.S. sizeof(s1) вернет не то 4, не то 8 — размер указателя в вашей системе...

P.P.S. i = 0; i <= n ; — специально, для сброса лишнего \n из буфера после чтения n.

→ Ссылка