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

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

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

Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо добавлением слева нужного числа символов с . память под строку выделяется с помощью вызова new
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2015, 03:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Реализация функции char *padl(const char *string, int len, int c=' ') (C++):

[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
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот...

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

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

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

5
Lensato
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
JanNovik
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 22
11.12.2015, 12:01  [ТС] #3
А можете построчно обьяснить,что в каждой строке происходит?
И что писать в главной функции?
0
Lensato
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
JanNovik
0 / 0 / 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
Lensato
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
14.12.2015, 09:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2015, 09:06
Привет! Вот еще темы с решениями:

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

Несовместимость типов данных: Error:invalid conversion from 'int' to 'const char*'
Код для ардуинки. #include &lt;VirtualWire.h&gt; const int led_pin = 13; const...

error LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall KDocument::Open(char const *)" в функции _WinMain@16
ребята, при компиляции линковщик ругается, подскажите пожалуйста , вроде бы и...

Как int конвертировать в string или char?
например как сделать это: int x=5; string y=&quot;Hello&quot;+x;


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

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

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