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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ridd[73rus]
0 / 0 / 0
Регистрация: 22.10.2010
Сообщений: 17
#1

Дополнить каждое слова пробелами(по количеству максимального) - C++

15.11.2010, 14:09. Просмотров 1200. Ответов 19
Метки нет (Все метки)

Вот задачка. "Дополнить каждео слово предложения пробелами так , чтобы его длина была равна длине самого длинного слова. Распечатать получившееся предложение." Решить задачку нужно используя отдельную функция на каждое действие. Применение глобальных йункций запрещено. Мне уже решали данную задачу , но не без последнего условия , проще помочь. Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2010, 14:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дополнить каждое слова пробелами(по количеству максимального) (C++):

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

дополнить пробелами каждое слово так, чтобы его длинна приравнялась длинне самого длинного слова в строке - C++
Язык Си. Нужна помощь с файлами. Компиляция проходит успешно, но при запуске Windows выдает ошибку. Задача программы: дополнить пробелами...

Дана строка, содержащая разделенные пробелами слова, вывести все слова-палиндромы - C++
Дана строка, содержащая разделенные пробелами слова.Вивесты все имеющиеся слова-палиндлромы и их общее количество,срочно надо,у меня не...

Дана строка текста, в которой слова разделены пробелами и запятыми, вывести повторяющиеся слова - C++
Помогите пожалуйста! Как мне найти и вывести повторяющиеся слова? П.С. При работе со строками не использовать указатели. Строки...

Поменять местами первые слова (слова разделены пробелами) заданных строк, без использования процедур - C++
Вводятся две строки произвольного текста. Поме-нять местами их первые слова (слова разделены пробелами). без подпроцедур.

Дана строка, слова в которой разделены пробелами. Оставьте в ней только те слова, которые начинаются на ту же букву, что и первое слово. - C++
5.17 Дана строка, слова в которой разделены пробелами. Оставьте в ней только те слова, которые начинаются на ту же букву, что и первое...

19
ridd[73rus]
0 / 0 / 0
Регистрация: 22.10.2010
Сообщений: 17
16.11.2010, 20:50  [ТС] #16
Извиняюсь. Чистый Си.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
16.11.2010, 23:20 #17
clear C

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
#include <string.h>
#include <stdio.h>
#include <malloc.h>
 
#define MAX_STR_LEN 250
#define MAX_WORDS_NUMB 30
 
int main()
{
    char Str[MAX_STR_LEN];
    char Arr[MAX_WORDS_NUMB][MAX_STR_LEN];
    fprintf(stdout, "Enter string\n");
    fgets(Str, MAX_STR_LEN, stdin);
    Str[strlen(Str)]='\0';
    char* ptr=strtok(Str, " ");
    if(ptr)
        strcpy(Arr[0], ptr);
    int cnt=1;
    while(ptr)
    {
        ptr=strtok(0, " ");
        if(ptr)
        {
            strcpy(Arr[cnt], ptr);
            ++cnt;
        }
    }
    int i=0;
    int max_strlen=0;
    for(i; i<cnt; ++i)
    {
        if(i==cnt-1)
        {
            Arr[i][strlen(Arr[i])-1]='\0';
        }
        int t=strlen(Arr[i]);
        if(t>max_strlen)
            max_strlen=t;
    }
    char* String;
    for(i=0; i<cnt; ++i)
    {
        int t=strlen(Arr[i]);
        int p=max_strlen-t;
        if(p!=0)
        {
            String=(char*) malloc(sizeof(char)*(p+1));
            memset(String, ' ', sizeof(char)*p);
            String[p]='\0';
            strcat(Arr[i], String);
            free(String);
        }
    }
    for(i=0; i<cnt; ++i)
    {
        fprintf(stdout, "%s ", Arr[i]);
    }
    fprintf(stdout, "\n");
    return 0;
}
Добавлено через 53 минуты
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <string.h>
#include <stdio.h>
#include <malloc.h>
 
/*Макс длина строки*/
#define MAX_STR_LEN 250
/*Макс кол-во слов*/
#define MAX_WORDS_NUMB 30
 
/*Функция, разделающая строку на слова.
Между словами должны быть пробелы*/
int Token(char* Str, char Arr[][MAX_STR_LEN])
{
    int cnt=0;
    char* ptr=strtok(Str, " ");
    if(ptr)
    {
        strcpy(Arr[cnt], ptr);
        ++cnt;
    }
    while(ptr)
    {
        ptr=strtok(0, " ");
        if(ptr)
        {
            strcpy(Arr[cnt], ptr);
            ++cnt;
        }
    }
    return cnt;
}
/*Функция поиска максимальной длины строки*/
int find_max_len(int cnt, char Arr[][MAX_STR_LEN])
{
    int i=0, t=0, max_strlen=0;
    for(i; i<cnt; ++i)
    {
        if(i==cnt-1)
        {
            /*Убираем последний символ в последнем слове
            - перевод строки. '\n', если по простому.*/
            Arr[i][strlen(Arr[i])-1]='\0';
        }
        t=strlen(Arr[i]);
        if(t>max_strlen)
           max_strlen=t;
    }
    return max_strlen;
}
/*Трансформация строки. Функция добавления пробелов*/
void transform_string(char Arr[][MAX_STR_LEN], int cnt, int max_strlen)
{
    /*Временная строка*/
    char* String;
    int i=0, t=0, p=0;
    for(i; i<cnt; ++i)
    {
        t=strlen(Arr[i]);
        /*Находим насколько символов отличается
        длина i-ого слова от максимальной длины слова*/
        p=max_strlen-t;
        if(p!=0)
        {
            String=(char*) malloc(sizeof(char)*(p+1));
            /*Заполняем p пробелами временную строку*/
            memset(String, ' ', sizeof(char)*p);
            /*Ограничиваем строку нулевым терминатором*/
            String[p]='\0';
            strcat(Arr[i], String);
            free(String);
        }
    }
}
/*Печать измененной строки*/
void print_str(char Arr[][MAX_STR_LEN], int cnt)
{
    int i=0;
    for(i; i<cnt; ++i)
    {
        fprintf(stdout, "%s ", Arr[i]);
    }
    fprintf(stdout, "\n");
}
/*Главная функция*/
int main()
{
    char Str[MAX_STR_LEN];
    char Arr[MAX_WORDS_NUMB][MAX_STR_LEN];
    fprintf(stdout, "Enter string\n");
    fgets(Str, MAX_STR_LEN, stdin);
    int i=0, max_strlen=0;
    int cnt=Token(Str, Arr);
    max_strlen=find_max_len(cnt, Arr);
    transform_string(Arr, cnt, max_strlen);
    print_str(Arr, cnt);
    return 0;
}
1
ridd[73rus]
0 / 0 / 0
Регистрация: 22.10.2010
Сообщений: 17
21.11.2010, 14:40  [ТС] #18
программа должна работать вот в этом компиляторе http://rapidshare.com/files/432181885/CodeBlocks.rar. заранее благодарен
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
21.11.2010, 14:52 #19
ridd[73rus], так должно работать. Вышеприведнные коды используют только стандартные библиотеки языка, так что должно компилироваться любым компилятором.
0
ridd[73rus]
0 / 0 / 0
Регистрация: 22.10.2010
Сообщений: 17
23.11.2010, 09:19  [ТС] #20
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
void AddSpaces(char str[256], char cstr[256]); // прототип
 
void main()
{
        char str[256]; // это строка 
                char cstr[256];
                AddSpaces(str,cstr);
puts(cstr);// выводим то что у нас получилось
_getch();
}
 
void AddSpaces(char str[256], char cstr[256])
{
        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," "); // и так далее до конца строки
}
}

вот это более простое решение задачи , но его нужно разбить на отдельные функции . Сделайте пожалуйста.
выглядеть должно примерно вот так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[// Ввод предложения
void InpPredl(char *s)
{
puts(" Введите предложение \n");
strcpy (s," Верите ли вы, что задача решена?");
// gets (s);
}
// Вывод результата
void OutPredl (char *s1, char *s2)
{
puts ("Исходное предложение");
puts (s1);
puts (" Результат ");
puts (s2);
getch ();
}
0
23.11.2010, 09:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2010, 09:19
Привет! Вот еще темы с ответами:

Вводится строка каждое слово которой отделяется от других слов одним или несколькими пробелами. - C++
Вводится строка каждое слово которой отделяется от других слов одним или несколькими пробелами. Найти количество слов состоящих из пяти...

Дана строка символов, состоящая из произвольного текста, слова раз-делены пробелами. Вывести на экран порядковый номер слова, накрывающего k позицию - C++
Помогите с вот такой вот задачкой: Дана строка символов, состоящая из произвольного текста, слова раз- делены пробелами. Вывести на...

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них - C++
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела....

ООП. Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по правилу - C++
Напечатать слова, отличные от последнего слова, предварительно преобразовав каждое из них по правилу: удалить из слова первую букву....


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

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

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