Форум программистов, компьютерный форум CyberForum.ru

дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке - C++

Восстановить пароль Регистрация
 
Fagroz
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 15
03.05.2011, 15:18     дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке #1
Язык Си.
Нужна помощь с файлами. Компиляция проходит успешно, но при запуске Windows выдает ошибку. Задача программы: дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке. Саму строку считывать из одного файла, результат записать в другой файл. Вот программа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 20
 
 
void AddSpaces(char str[256], char cstr[256]); // прототип
void Input (char str[N]);                      // прототип
void Out (char cstr[]);                           // прототип
 
int main()
{
    char str[N]; // это строка
    char cstr[N];
    Input (str);
    AddSpaces(str,cstr);
    Out (cstr);
//puts(cstr);// выводим то что у нас получилось
    return 0;
}
 
void Input (char str[N])
{
    FILE *f;
    f = fopen ("inp.txt", "r");
    fgets (str, N, f);
    fclose (f);
}
 
void AddSpaces(char str[N], char cstr[N])
{
    char spaces[20] = {"          "}; // массив пробелов
    //gets(str); // ввод строки с клавиатуры
 
    strcpy(cstr,str); // создаем копию(копируем из str в cstr)
    char * pch; // указатель на символы
    int max_len = 0 ; // длина максимального слова
    int length; // длина отдельно взятого слова
    int dif; // разница в длине
    pch = strtok(cstr," "); // указатель указывает на первое слово строки(то что до первого пробела)
    while (pch != NULL)
    {
        length = strlen(pch); // длина слова
        if (max_len < length) max_len = length; // выводим максимальную длину слова
        pch = strtok(NULL," "); // переходим к следующему слову
    }
 
    strcpy(cstr,""); // теперь cstr пустая строка
    pch = strtok(str," "); // берем первое слово из str
 
    while (pch != NULL)
    {
        length = strlen(pch); // измеряем его длину
        dif = max_len - length; // сравниваем с максимальной
        strcat(cstr,pch); // присоединяем его к cstrгш
        strncat(cstr,spaces,dif); // присоединяем к cstr из spaces кол-во пробелов(dif)
        pch = strtok(NULL," "); // и так далее до конца строки
    }
}
 
void Out (char *cstr)
{
    FILE *f;
    f = fopen ("result.txt", "w");
    fputs (cstr, f);
    fclose (f);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 15:18     дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке
Посмотрите здесь:

Дополнить каждое слово предложения пробелами (по длине максимального слова) C++
Дополнить каждое слова пробелами(по количеству максимального) C++
C++ Отредактировать файл так, чтобы каждое слово находилось на отдельной строке
C++ Найти длину самого короткого слова и самого длинного слова в строке
C++ Вывод самого длинного слова в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
03.05.2011, 15:23     дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке #2
Два момента:
1) в главной подпрограмме у вас сначала вызывается функция Input, но никто не сказал, что на момент вызова файл существует.
2) есть ли в этом файле то, что можно обработать - большой вопрос(например файл пустой)
Fagroz
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 15
03.05.2011, 15:26  [ТС]     дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке #3
т.е. нужно написать проверку, что файл не пустой?
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,108
Записей в блоге: 3
03.05.2011, 15:43     дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке #4
И еще обратите внимание, что вы пытаетесь прочитать из файла N символов, что де-факто может быть (скорее всего) не так.

Добавлено через 1 минуту
Стоп. Неправ.

Добавлено через 18 секунд
Сейчас внимательно посмотрю.
Yandex
Объявления
03.05.2011, 15:43     дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке
Ответ Создать тему
Опции темы

Текущее время: 08:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru