Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/50: Рейтинг темы: голосов - 50, средняя оценка - 4.92
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101

Добавление пробелов в строку

09.12.2009, 02:11. Показов 9818. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите пожалуйста решить данное задание: Дана строка,содержащая последовательность слов,разделенных пробелами. Вводится число которое не меньше длины этой строки и не больше 255. Необходимо привести строку к длине, задаваемой этим числом, путем введения дополнительных пробелов между словами. Если дано одно слово, то вывести сообщение.
Были похожие темы, но там надо было просто добавить пробел и это я понял. А вот как сделать добавление в этом случае я не понимаю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2009, 02:11
Ответы с готовыми решениями:

Если предложение начинается с пробелов, считать строку после пробелов. Правильно ли работает функция?
Скажите пожалуйста правильно ли я написала функцию которая: если предложение начинается с пробелов она считывает строку после пробелов то...

Ввести строку. Вывести строку так, чтобы за каждым словом следовало количество пробелов, равное длине слова.
Ввести строку. Вывести строку так, чтобы за каждым словом следовало количество пробелов, равное длине слова.

добавление пробелов в строке
здравствуйте! Постановка задачи. Дан текст, состоящий из слов, которые раз-делены пробелами и знаками препинания: точкой, запятой,...

5
 Аватар для Sayrus89
32 / 32 / 7
Регистрация: 26.10.2009
Сообщений: 98
09.12.2009, 02:33
Вариант 1:
Тебе нужно создать новую строку с длиной, равной тому числу, к которому должна приводится длина строки (тут есть вариант - если можно использовать динамическое выделение памяти и нет). Скопировать в неё первую строку и потом дополнить её пробелами ( for (int i=strlen(исходная_строка); i< число_которое_ввели; i++) { новая_строка[i] = ' '; } новая_строка[strlen(новая_строка)] = '\0' )
Надеюсь не слишком запутал)))

и вариант 2:

длина исходной строки - size
новая длина должна быть - new_size
создаем новую строку длины (new_size - size) и заполняем её пробелами.
потом вызываем функцию strcat(исходная_строка, новая_строка), которая возвращает указатель на нужную нам строку

Вот так все запутано, но все же
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,974
09.12.2009, 04:55
Цитата Сообщение от Sayrus89 Посмотреть сообщение
Вот так все запутано
Всё гораздо хуже!

Цитата Сообщение от Vivo Посмотреть сообщение
Дана строка,содержащая последовательность слов,разделенных пробелами. Вводится число которое не меньше длины этой строки и не больше 255. Необходимо привести строку к длине, задаваемой этим числом, путем введения дополнительных пробелов между словами. Если дано одно слово, то вывести сообщение.
Вот ровнялка по ширине консоли, переделайте, чтоб было по заданию
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
#include <stdio.h>
#include <string.h>
 
#define ROW_LEN 80 /* для наглядности. поменяйте на 255 при необходимости. */
 
size_t wordsCount(const char *str){
    const char *p;
    size_t count, inword;
    
    if ( !str || !(*str) )
        return 0;
    
    inword = count = 0;
    for ( p = str; *p; p++ ){
        if ( *p != ' ' ){
            if ( !inword ){
                inword = 1;
                count++;
            }
        }
        else {
            inword = 0;
        }
    }
    return count;
}
 
int main(void){
    char buf[ROW_LEN + 2]; /* "\n\0" */
    char spc[ROW_LEN], espc[ROW_LEN], *pWrd;
    size_t buf_len, nwords, spaces_needed, spaces_between_words, extra_spaces;
    
    while ( 1 ){
        printf("Enter string (single enter - exit): ");
        fgets(buf, ROW_LEN + 2, stdin);
        if ( *buf == '\n' )
            break;
        buf_len = strlen(buf);
        if ( buf[buf_len - 1] == '\n' )
            buf[--buf_len] = '\0';
        
        if ( buf_len == ROW_LEN ){ /* просто вывести строку */
            printf("%s\n", buf);
            continue;
        }
        
        nwords = wordsCount(buf);
        if ( !nwords ){
            printf("Empty string or some other error!\n");
            continue;
        }
        if ( nwords == 1 ){
            printf("Only one word in string!\n");
            continue;
        }
        spaces_needed = ROW_LEN - buf_len + nwords - 1;
        spaces_between_words = spaces_needed / (nwords - 1);
        memset((void*)spc, ' ', spaces_between_words);
        spc[spaces_between_words] = '\0';
        extra_spaces = spaces_needed % (nwords - 1);
        if ( extra_spaces )
            memset((void*)espc, ' ', extra_spaces);
        espc[extra_spaces] = '\0';
        for ( pWrd = strtok(buf, " "); pWrd != NULL; pWrd = strtok(NULL, " ") ){
            if ( --nwords ){
                if ( nwords == 1 && extra_spaces)
                    printf("%s%s%s", pWrd, spc, espc);
                else
                    printf("%s%s", pWrd, spc);
            }
            else
                printf("%s\n", pWrd);
        }
    }
    return 0;
}
Добавлено через 1 час 1 минуту
Вот
так
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
#include <stdio.h>
#include <string.h>
 
#define ROW_LEN 80 /* для наглядности. поменяйте на 255 при необходимости. */
 
size_t wordsCount(const char *str){
    const char *p;
    size_t count, inword;
    
    if ( !str || !(*str) )
        return 0;
    
    inword = count = 0;
    for ( p = str; *p; p++ ){
        if ( *p != ' ' ){
            if ( !inword ){
                inword = 1;
                count++;
            }
        }
        else {
            inword = 0;
        }
    }
    return count;
}
 
int main(void){
    char buf[ROW_LEN + 2]; /* "\n\0" */
    char spc[ROW_LEN], espc[ROW_LEN], *pWrd, *pEspc;
    size_t buf_len, nwords, spaces_needed, spaces_between_words, extra_spaces;
    
    while ( 1 ){
        printf("Enter string (single enter - exit): ");
        fgets(buf, ROW_LEN + 2, stdin);
        if ( *buf == '\n' )
            break;
        buf_len = strlen(buf);
        if ( buf[buf_len - 1] == '\n' )
            buf[--buf_len] = '\0';
        
        if ( buf_len == ROW_LEN ){ /* просто вывести строку */
            printf("%s\n", buf);
            continue;
        }
        
        nwords = wordsCount(buf);
        if ( !nwords ){
            printf("Empty string or some other error!\n");
            continue;
        }
        if ( nwords == 1 ){
            printf("Only one word in string!\n");
            continue;
        }
        spaces_needed = ROW_LEN - buf_len + nwords - 1;
        spaces_between_words = spaces_needed / (nwords - 1);
        memset((void*)spc, ' ', spaces_between_words);
        spc[spaces_between_words] = '\0';
        extra_spaces = spaces_needed % (nwords - 1);
        if ( extra_spaces )
            memset((void*)espc, ' ', extra_spaces);
        espc[extra_spaces] = '\0';
        pEspc = espc;
        for ( pWrd = strtok(buf, " "); pWrd != NULL; pWrd = strtok(NULL, " ") ){
            if ( --nwords ){
                printf("%s%s", pWrd, spc);
                if ( *pEspc ){
                    if ( nwords > 1 )
                        printf("%c", *pEspc++);
                    else 
                        printf("%s", pEspc);
                }
/*
                if ( nwords == 1 && extra_spaces)
                    printf("%s%s%s", pWrd, spc, espc);
                else
                    printf("%s%s", pWrd, spc);
*/
            }
            else
                printf("%s\n", pWrd);
        }
    }
    return 0;
}
чуть красивше...
0
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
10.12.2009, 01:15  [ТС]
Спосибо за помощь. Всё работает как и надо. Но препод выдвинул новые условия - всё должно выполняться без функций библиотеки <string.h> и процедур, так, что надо теперь еще как-то переделать без всего этого. Но ничего не получается Если можете помогите пожалуйста.

Добавлено через 1 час 1 минуту
Вот еще более подходящий вариант(надеюсь препод зачтет):

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
#include <stdio.h>
 
main()
{
     int i,i1,j,j1,n,ls,sl=0,k=0;
     float pr;
     char c,s[255],s1[255];
     pr=0;
 
     printf("Введите строку:\n");
     for(i=0;;i++)
     {                                 
          scanf("%c",&c);s[i+1]=0;
          if (c==10) break;
          if (c==' ') pr++;
          s[i]=c;
     }
 
     for (ls=0;s[ls];ls++);
 
     for(j=0;j<=ls;j++)
     for(i=j;(s[i]==' ')&((s[i+1]==' ')|(s[i+1]==0));i--)
     {
          j--;
          pr--;
          for(i1=i;i1<=ls;i1++)
          s[i1]=s[i1+1];
     }
 
     s[i+1]=0;
 
     j=i+1;
 
     printf("Введите нужную длинну (длина строки %d):",j-1);
     scanf("%d",&n);
 
     for(i=0;i<ls+1;i++)
     {
          if (s[i]!=' ') k=1;
          if (((s[i]==' ') ||(s[i]=='\0'))&& (s[i-1]!=' ')&&(k==1)){sl++;k=0;}
     }
 
 
 
     if ((n>ls)&&(n<254)&&(sl>1))
     {
          i1=0;
 
          for(i=0;j>=i;i++)
          {
          
               if((s[i]==' ')&(i!=j)&(i!=0)&s[i+1]!=' ')
           for(j1=0;j1<=((n-j)/pr);j1++)
           {
                s1[i1]=' ';
                i1++;
           }
               else
               {
                    c=s[i];
                    s1[i1]=c;
                    i1++;
               }
          }
          s1[i1+1]=0;
 
          for(i1=0;ls<n-1;i1++)
          if ((s1[i1]==' ')&(s1[i1+1]!=' '))
          {
           for (ls=0;s1[ls];ls++);
               for(i=ls;i>=i1;i--)
               s1[i+1]=s1[i];
           i1++;
           for (ls=0;s1[ls];ls++);
          }
 
          for (ls=0;s1[ls];ls++);
      s1[ls+1]=0;
 
      printf("Полученная строка:\n%s",s1);
     }
     else
     if (n==ls) printf("Полученная строка:\n%s",s);
     if(sl<=1)printf("Слов слишком мало");
     else
     printf("Длина ошибочная");
}
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
10.12.2009, 01:17
Vivo,

Не по теме:

конеш зачтёт ему разбираца в лом будет :D

0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,974
10.12.2009, 09:52
Цитата Сообщение от Vivo Посмотреть сообщение
C
1
2
3
int i,i1,j,j1,n,ls,sl=0,k=0; 
float pr;
char c,s[255],s1[255];
Да, это зачёт, к бабке не ходи!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2009, 09:52
Помогаю со студенческими работами здесь

Равномерная вставка пробелов в строку
Разработать алгоритм и программу для равномерной вставки пробелов в начальный строку (длиной менее 50 символов) так, чтобы ее длина стала...

Как читать строку с учетом пробелов?
char b cin&gt;&gt;b; //вводим строку &quot; 45&quot; cout&lt;&lt;b; результат вывода &quot;4&quot; почему? как сделать так чтобы cin ело...

Найти и вывести на печать строку, содержащую максимальное количество пробелов
Для всех вариантов с клавиатуры задается произвольный текст, содержащий не более 5 строк, в каждой строке не более 80 символов Найти...

Сжать строку, заменяя несколько подряд стоящих пробелов одним
Помогите кто чем может: 1. Найти два наибольших элемента массива целых чисел. Написать процедуру и пример обращения к ней. Массив и...

Вывести в одну строку без пробелов все нечётные числа от 1 до N
На вход подаётся натуральное число N (не более 100). Вывести в одну строку без пробелов все нечётные числа от 1 до N. Sample Input 1: 7...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru