Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
JanNovik
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 22
#1

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

11.12.2015, 03:27. Просмотров 396. Ответов 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)' - C++
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h> #include<cstring.h> #include<string.h> ...

Как превести из char* в int и наоборот из int в char*? - C++
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому написать функцию не сложно, но наверняка это...

Форматирование строк, char to int & int to char - C++
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn str_to_num(const str) // Тупо...

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

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

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

5
Lensato
49 / 49 / 24
Регистрация: 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 / 24
Регистрация: 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 / 24
Регистрация: 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' - C++
#include &lt;iostream&gt; using namespace std; int main () { int a,b; char op; int res; cout &lt;&lt; &quot;write constant and sing&quot;; ...

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

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

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


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

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

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