Помогите с задачей на си
Нужно Разработать функцию 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.