Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fagroz
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 15
#1

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

03.05.2011, 15:18. Просмотров 549. Ответов 3
Метки нет (Все метки)

Язык Си.
Нужна помощь с файлами. Компиляция проходит успешно, но при запуске 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 15:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке (C++):

Дополнить каждое слово предложения пробелами (по длине максимального слова) - C++
Вот задачка. &quot;Дополнить каждое слово предложения пробелами так, чтобы его длина была равна длине самого длинного слова. Распечатать...

Дополнить каждое слова пробелами(по количеству максимального) - C++
Вот задачка. &quot;Дополнить каждео слово предложения пробелами так , чтобы его длина была равна длине самого длинного слова. Распечатать...

Найти длину самого короткого слова и самого длинного слова в строке - C++
помогите!!! Дана строка, содержащая текст. Найти длину самого короткого слова и самого длинного слова.

Отредактировать файл так, чтобы каждое слово находилось на отдельной строке - C++
Помогите записать програмно файл так чтобы в каждой строчке было одно слово. например исходный файл 1111 1111 1111 1111 ...

Напечатать сообщение «This is a C program» так, чтобы каждое слово располагалось в новой строке - C++
Напечатать сообщение «This is a C program» так, чтобы каждое слово располагалось в новой строке (указать не менее двух вариантов такого...

Вывод самого длинного слова в строке - C++
НАПИШИТЕ КОД ПРОГРАММЫ КОТОРАЯ ВЫВОДИТ НА ЭКРАН САМОЕ ДЛИННОЕ СЛОВО В ДАННОЙ СТРОКЕ

3
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,444
Записей в блоге: 2
03.05.2011, 15:23 #2
Два момента:
1) в главной подпрограмме у вас сначала вызывается функция Input, но никто не сказал, что на момент вызова файл существует.
2) есть ли в этом файле то, что можно обработать - большой вопрос(например файл пустой)
0
Fagroz
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 15
03.05.2011, 15:26  [ТС] #3
т.е. нужно написать проверку, что файл не пустой?
0
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,444
Записей в блоге: 2
03.05.2011, 15:43 #4
И еще обратите внимание, что вы пытаетесь прочитать из файла N символов, что де-факто может быть (скорее всего) не так.

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

Добавлено через 18 секунд
Сейчас внимательно посмотрю.
0
03.05.2011, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 15:43
Привет! Вот еще темы с ответами:

Нахождение самого длинного слова в строке - C++
Здравствуйте :) У меня есть проблема, я написал программу, но она работает не совсем так как надо. Задание: Создать текстовый файл....

Определить размер самого длинного слова в строке - C++
hi. есть участок кода, который должен находить размер самого длинного слова в строке, но нет. int main() { int...

Найти размер самого длинного слова в строке. - C++
Строка состоит из нескольких слов, разделенных одним или несколькими пробелами.

Определение самого длинного симметричного слова в строке - C++
Осталось выбрать самое длинное слово..но как? #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.