Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 20.11.2015
Сообщений: 22
1

Реализация функции char *padl(const char *string, int len, int c=' ')

11.12.2015, 03:27. Показов 2244. Ответов 5
Метки нет (Все метки)

Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо добавлением слева нужного числа символов с . память под строку выделяется с помощью вызова new
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2015, 03:27
Ответы с готовыми решениями:

[BCC32 Error] File1.cpp(74): E2285 Could not find a match for 'student1::student1(const char *,int,int)'
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h>...

Как превести из char* в int и наоборот из int в char*?
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому...

Форматирование строк, char to int & int to char
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn ...

Преобразование const char* в int
Всем привет. В исходниках одного проекта встретил вот такой участок. typedef struct { ...

5
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
11.12.2015, 11:51 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char *padl(const char *string, int len, int c = ' ')
{
    char *new_str = new char[len + 1];
    int source_len = strlen(string);
    
    if (len <= source_len)
        strcpy(new_str, string + source_len - len);
    else
    {
        int difference = len - source_len;
        for (int i = difference - 1; i >= 0; --i)
            new_str[i] = c;
 
        strcpy(new_str + difference, string);
    }
 
    return new_str;
}
0
1 / 1 / 0
Регистрация: 20.11.2015
Сообщений: 22
11.12.2015, 12:01  [ТС] 3
А можете построчно обьяснить,что в каждой строке происходит?
И что писать в главной функции?
0
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
11.12.2015, 12:34 4
Построчно объяснять не хочу, слишком долго.
Спрашивайте что конкретно не ясно (а что бы было не ясно что-то конкретное, а не все полностью, надо потратить не мало времени за чтением соответствующей литературы).

Если кроме реализации функции нужен main() для демонстрации, то можно так например:
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
char *padl(const char *string, int len, int c = ' ')
{
    char *new_str = new char[len + 1];
    int source_len = strlen(string);
    
    if (len <= source_len)
        strcpy(new_str, string + source_len - len);
    else
    {
        int difference = len - source_len;
        for (int i = difference - 1; i >= 0; --i)
            new_str[i] = c;
 
        strcpy(new_str + difference, string);
    }
 
    return new_str;
}
 
int main()
{
    char *string;
    int cur_length;
 
    char *new_string;
    int new_length;
 
    char character;
 
    cout << "Enter string: ";
    character = cin.get();
    cin.putback(character);
    cur_length = cin.rdbuf()->in_avail() - 1;
    string = new char[cur_length + 1];
    cin >> string;
 
    cout << "Enter new length: ";
    cin >> new_length;
 
    cout << "Enter character: ";
    cin >> character;
 
    new_string = padl(string, new_length, character);
 
    cout << "New string: " << new_string << endl;
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Хотя ладно, упростим немного main()
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    char *new_string;
    new_string = padl("source", 4);
 
    cout << "New string: " << new_string << endl;
 
    system("pause");
    return 0;
}
0
1 / 1 / 0
Регистрация: 20.11.2015
Сообщений: 22
11.12.2015, 18:38  [ТС] 5
Так, вроде разобрался.
Неясно только вот эти строки
C++
1
2
3
4
5
6
 cout << "Enter string: ";
    character = cin.get();
    cin.putback(character);
    cur_length = cin.rdbuf()->in_avail() - 1;
    string = new char[cur_length + 1];
    cin >> string;
и

C++
1
new_string = padl("source", 4);
Добавлено через 4 минуты
А как переделать функцию ,чтобы не использовать функции из класса <string>&
strlen и strcpy? как на циклы это заменить?
0
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
14.12.2015, 09:06 6
C++
1
2
3
4
5
6
7
8
9
10
    // cout и cin потоки ввода и вывода информации
    cout << "Enter string: ";   // записать в поток cout "Enter string: "
    cin >> string;              // считать из потока cin строку и записать в string
 
    // cin.get() и его друзья: [url]https://cppstudy.wordpress.com/2009/03/27/cin-get-and-co/[/url]
    character = cin.get();                      // считать из потока cin один символ и записать в character
    cin.putback(character);                     // записать смивол character в поток cin
    cur_length = cin.rdbuf()->in_avail() - 1;   // смотрим количество символов в буфере потока cin
    string = new char[cur_length + 1];          // выделяем для указателя string ровно столько памяти, что бы вместился весь буфер из cin
new_string = padl("source", 4); // вызываем вашу функцию с двумя первыми параметрами (третий можно опустить, т.к. по-умолчанию int c = ' ')
Цитата Сообщение от JanNovik Посмотреть сообщение
А как переделать функцию ,чтобы не использовать функции из класса <string>&
А где вы у меня увидели класс <string>?
Я взял название переменной из сигнатуры вашей функции:
C++
1
const char *string
Вот если подключить <string>, то уже тогда имя string будет конфликтовать с классом string
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2015, 09:06

Invalid conversion from `int' to `const char*'
Здравствуйте.Возникла проблема с типами данных, пытался решить - стало хуже...:wall: Вот сам код:...

Невозможно преобразовать параметр из int в const char
Приветствую, помогите пожалуйста исправить следующую ошибку: printf: невозможно преобразовать...

Char const* str to vector<unsigned int>
Добрый день! На visual studio 2012 не работает код: char const* str{ &quot;1 2 4 12 5123&quot; };...

Ошибка error C2446: '==' : no conversion from 'const char *' to 'int'
#include &lt;iostream&gt; using namespace std; int main () { int a,b; char op; int res; ...


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

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

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