Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Dream_O
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 38
#1

Дополнить строку символами

19.04.2014, 17:45. Просмотров 602. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток. Такая задача: Вводим строку с клавиатуры (строку следует pассматpивать как символьную массивы (array of char), а не стpоки (string)), необходимо дополнить её знаками "_" до максимально возможное длины, все пробелы тоже следует заменить на "_".

С заменой пробелов на "_" проблем нет. Подскажите, как добавить "_" до макс возможной длины?
(Т.е. если вводим "hi world", то строка преобразуется в "hi_world________________________" при максимально возможной длине 32)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define SIZE_buff 50
 
void format(char *str, int n)
{   
    std::replace(str, str + strlen(str), ' ', '_');
}
 
void proc 
{
  char name[32];
  char buffer[SIZE_buff];   
 
  fgets(buffer, SIZE_buff, stdin); 
  format(buffer,32);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 17:45
Ответы с готовыми решениями:

Если длина строки больше 10 - оставить первые 6 символов, иначе дополнить строку символами 'о'
Дана строка.Если ее длина больше 10,то оставить в строке только первые 6...

Строки. Нужно дополнить строку нулями слева
Нужно дополнить строку нулями слева. Например была строка str1="345" ...

Как заполнить строку случайными символами?
Как заполнить строку случайными символами?

Вывести на экран строку с отсортированными по возрастанию символами и сумму их кодов
После ввода с клавиатуры произвольного строки вывести на экран эту строку с...

Дана строка s. Вывести эту строку с пробелами между всеми символами.
Дана строка s. Вывести эту строку с пробелами между всеми символами.

4
zss
Модератор
Эксперт С++
7083 / 6619 / 4190
Регистрация: 18.12.2011
Сообщений: 17,446
Завершенные тесты: 1
19.04.2014, 17:50 #2
C++
1
2
3
4
5
6
7
void format(char *str, int n)
{   
    int m=strlen(str);
    for(int i=m-1;i<n-1;i++)
               str[i]='_';
    str[n-1]=0; // терминальный ноль в конце строки
}
0
Dream_O
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 38
19.04.2014, 18:21  [ТС] #3
Спасибо! И ещё два вопроса:
1) Как обрезать строку, если она превышает допустимое количество символов?

2) Как сделать возможным вывести русские символы?
Сейчас у меня такой механизм:
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
struct T_Book {
    char name[32];
    int NomerOtdela;
    char Dolzhnost[32];
    char Year[8];
};
 
struct T_Book_Queue {
    T_Book book;
    T_Book_Queue *next;
};
 
struct T_Queue {
    T_Book_Queue *head;
    T_Book_Queue *tail;
};
 
void addToQueue(T_Queue &queue)
{
    char buffer[SIZE_buff]; 
    T_Book_Queue *p;
    p = (T_Book_Queue*)malloc(sizeof(T_Book_Queue));
 
    p->next = NULL;
 
    printf("ФИО сотpудника: ");
    fgets(buffer, SIZE_buff, stdin); 
    format(buffer,32);
    sscanf(buffer, "%s", p->book.name);
 
    printf("Hомеp отдела: ");
    fgets(buffer, SIZE_buff, stdin); sscanf(buffer, "%d", &p->book.NomerOtdela);
 
    printf("Должность: ");
    fgets(buffer, SIZE_buff, stdin); sscanf(buffer, "%s", p->book.Dolzhnost);
 
    printf("Дата pождения: ");
    fgets(buffer, SIZE_buff, stdin); sscanf(buffer, "%s", &p->book.Year);
 
 
    if (queue.head != NULL) 
        queue.tail->next = p;
    else
        queue.head = p;
    queue.tail = p;    
}
 
void showQueue(T_Queue &queue)
{
    T_Book_Queue *p;
    p = queue.head;
 
    printf("\nЭлементы списка:\n");
    while (p != NULL) {
        CharToOem(buffer,buffer);
 
        printf("ФИО сотрудника: %s номер отдела: %d должность:%s дата рождения:%s\n",
            p->book.name, p->book.NomerOtdela, p->book.Dolzhnost, p->book.Year);
 
        p = p->next;        
    }
    printf("\n");
}
Так вот в процедуре show я могу пользоваться только латиницей. В иннете нарыл, что нужно использовать CharToOem , но практически пока это сделать не удалось

Добавлено через 18 минут
Выдает
error C2664: 'CharToOemW' : cannot convert parameter 1 from 'char [32]' to 'LPCWSTR'
0
cooller
565 / 533 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 18:22 #4
Цитата Сообщение от Dream_O Посмотреть сообщение
2) Как сделать возможным вывести русские символы?
C++
1
2
SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
и в свойствах консоли поставь шрифт Lucida Contol
Цитата Сообщение от Dream_O Посмотреть сообщение
2) Как обрезать строку
присвой символу на котором ты хочешь закончить '\0'
Пример
C++
1
2
3
    char str[] = "123456789";
    str[5] = '\0';
    std::cout<<str;
1
Dream_O
0 / 0 / 0
Регистрация: 07.05.2013
Сообщений: 38
21.04.2014, 18:07  [ТС] #5
Огромное спасибо за помощь!
0
21.04.2014, 18:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 18:07

Вывести на экран строку с отобранными из введенной символами, которые не являются буквами
Моя задача: После ввода с клавиатуры произвольного строки вывести на экран эту...

Функция: вывести на экран строку из слов, разделенных символами подчеркивания вместо пробелов
Написать функцию, которая выводит на экран строку, из слов, разделенных...

Получить новую строку, вставив между двумя символами исходной строки символ *
Дана строка. Получите новую строку, вставив между двумя символами исходной...


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

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

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