Проверка условия: являются ли оба символа пробелами - C (СИ)
Формулировка задачи:
Есть программа на С++
Переведите,пожалуйста,ее просто на Си
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
using namespace std;
// Проверка условия: являются ли оба символа пробелами
bool BothAreSpaces(char c1, char c2)
{
return c1 == ' ' && c2 == ' ';
}
int main()
{
string s;
// Читаем строку
getline(cin, s);
// Ищем первый непробел
string::size_type pos1 = s.find_first_not_of(' ');
// Ищем последний непробел
string::size_type pos2 = s.find_last_not_of(' ') + 1;
string s1;
// Копируем часть s от pos1 до pos2 в s1, удаляя последовательно идущие символы, удовлетворяющие условию
unique_copy(s.begin() + pos1, s.begin() + pos2, back_inserter(s1), BothAreSpaces);
// Выводим результат
cout « s1 « endl;
}Решение задачи: «Проверка условия: являются ли оба символа пробелами»
textual
Листинг программы
#include <stdio.h>
#define GUESS_MAX_LINE_LENGTH 1024
int main(void)
{
char line[GUESS_MAX_LINE_LENGTH], ch;
int index, state = 0;
for (index = 0; (ch = getchar()) && ch != '\n' && ch != EOF; )
{
if (!state && ch == ' ')
{
state = 1;
line[index++] = ch;
}
else if (ch != ' ')
{
if (state)
{
state = 0;
}
line[index++] = ch;
}
}
line[index] = '\0';
printf("%s\n", line);
}
Объяснение кода листинга программы
В этом коде определен массив символов line и переменная index для отслеживания позиции ввода в строке. Переменная state используется для отслеживания текущего состояния ввода. Изначально state равно 0, что означает, что мы ищем начало строки. Когда мы находим пробел и state все еще равно 0, мы переводим state в 1, что означает, что мы ищем конец строки. Когда мы находим символ, который не является пробелом, мы обновляем state на 0, чтобы начать следующую строку. Мы добавляем символы, которые мы находим, в line, увеличивая index на каждом шаге. Когда мы достигаем конца строки, мы добавляем символ новой строки в line и выводим line.