[Мы решаем ваши проблемы с Си и Паскалем ]
Главная » Статьи » Задачи из заказов » Заказ 08.07.07 C

Напечатать все слова, отличные от последнего слова, предварительно удалив из слов последнюю букву.
//
//   Задана фраза - последовательность, содержащая от 2 до 30 слов, в каждом из
// которых от 2 до 10 латинских букв; между соседними словами - не менее одного
// пробела, за последним словом - точка . Напечатать все слова, отличные от
// последнего слова, предварительно преобразовав каждое их них по следующему
// правилу: удалить из слова последнюю букву.
//   Программа должна читать текст из файла "input.txt" и выводить
// последовательность в файл "output.txt".
//

#include "stdafx.h"

bool isEqual(char a[10], char b[10])
{
    int i = 0;
    while (a[i] == b[i] && a[i] != 0 && b[i] != 0)
        i++;
    return (a[i] == b[i]);
}

int main()
{
    char a[30][10];
    FILE *in;     
    in = fopen("input.txt", "rt");
    char ch;
    int i = 0;
    int j = 0;
    bool newword = true;
    while (!feof(in))            
    {
        ch = fgetc(in);
        if (ch == '.')
        {
            a[i][j-1] = 0;
            break;
        }
        if (ch != ' ')
        {
            a[i][j] = ch;
            j++;
            newword = false;
        } else
        {
            if (!newword)
            {
                a[i][j-1] = 0;
                i++;
                j = 0;
                newword = true;
            }
        }
    }    
    fclose(in);
    
    int n = i;
    FILE *out;     
    out = fopen("output.txt", "wt");
    for (i = 0; i < n; i++)
        if (!isEqual(a[i], a[n]))
        {
            int j = 0;
            while (a[i][j] != 0)
            {
                fputc(a[i][j], out);
                j++;
            }
            fputc(13, out);
        }
    fclose(out);
    return 0;
}

Категория: Заказ 08.07.07 C | Добавил: solver (08.01.2007)
Просмотров: 3322