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

Ввести строку символов, переформатировать его, продлив до длины 60 символов равномерным добавлением пробелов между словами. - C++

Восстановить пароль Регистрация
 
Broo
Сообщений: n/a
08.04.2013, 16:04     Ввести строку символов, переформатировать его, продлив до длины 60 символов равномерным добавлением пробелов между словами. #1
Всем привет)
Не подскажите как написать алгоритм по задаче
Есть задача
Ввести строку символов, переформатировать его, продлив до длины 60 символов равномерным добавлением пробелов между словами. Определить количество добавленных пробелов.

вот код :
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
#include <iostream>
#include <conio.h>
using namespace std;
 
const int size=60; // длина строк
char S[size+1]; //рядок
int spacing(char *S, int target_len); // добавление пробелов
int ch_count(char *S, const char Ch); // подсчет вхождения символа в строку
 
int main()
{  
    int count=0; 
    puts("Input string: ");
    cin.getline(S,size+1);
    cout<<"String length: "<<strlen(S)<<endl;
    
    if (strlen(S)!=size) count=spacing(S,size);
    
    if (count<0) 
        cout<<"String has only one word! Operation fail!"<<endl;
    else {
        cout<<S<<endl;
        cout<<"Count of space: "<<count<<endl;
    }
 
    system("pause");
    return 0;       
}
 
int spacing(char *S, int target_len)
{
    int i, j, n, count;
    char *ptr=S;
    char *result;
 
    count = ch_count(S,' ');
    if (!count) return -1;
    for(n=0; strlen(S)+count*(n+1) <= target_len; n++);//количество пробелов которе нужно вставить в каждую пробельную позицию 
    if (!n) return 0;
 
    result = new char [target_len+1];//динамическое выделения памяти под строку
 
    for(i=0; *ptr; i++)//создания результатирующая строки 
    {
        if (*ptr==' ')
        {
            for(j=0; j!=n; j++, i++)
                result[i]=*ptr;
            ptr++;
            i--;
        } else {
            result[i]=*ptr; ptr++;
        }
    }
    result[i]=0;
 
    strcpy(S,result);//передача результатирующий строки строке S
 
    delete [] result;
    return count*n;
}
 
int ch_count(char *S, const char Ch)
{
    int count = 0;
    char *begin = S, *end = begin + strlen(S);
 
    while (begin<end)
    {
        if (*begin == Ch) count++;
        if (*end == Ch) count++;
        begin++;
        end--;
    }
 
    if (begin == end && *begin == Ch) count++;
 
    return count;
}
Спасибо заранее
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 16:04     Ввести строку символов, переформатировать его, продлив до длины 60 символов равномерным добавлением пробелов между словами.
Посмотрите здесь:

Написать функцию, преобразующую строку символов так, что между словами всегда находится два пробела C++
C++ Ввести с клавиатуры строку символов и обработать ее
C++ ввести строку символов. Сформировать строку вдвое большей длины, где каждый символ предворяется пробелом. Вывести полученную строку.
Вывести строку длины N, которая состоит из чередующихся символов C++
C++ Ввести строку длинной 500 символов
дан текстовый файл. получить все его строки, содержащие более 20 символов, отличных от пробелов. C++
C++ Вывести строку длины N, которая состоит из символов C
Ввести строку символов. Найти количество неповторяющихся символов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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