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

Функция выделяет из заданной строки подстроку заданной длины, начиная с заданной позиции

03.02.2019, 12:44. Просмотров 380. Ответов 5

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


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
#include <iostream>
 
using namespace std;
 
const int n = 10;
 
char* stroka(char* temp, int positia, int dlina, int t) {
    int size = 0;
    char* z = new char[size];
    int k = 0;
 
    if (positia > dlina)
    {
        size = dlina + positia + 1;
        for (int i = positia; i < size; i++) {
            z[k] = temp[i];
            k++;
        }
        z[k] = '\0';
    }
    else
    {
        size = dlina - positia + 1;
        for (int i = positia; i < size; i++) {
            z[k] = temp[i];
            k++;
        }
        z[k] = '\0';
    }
 
 
    return z;
}
 
 
int mylen(char str[]) {
 
    int k = 0;
 
    while (str[k]) {
 
        k++;
    }
 
    return k;
}
 
 
int main() {
 
    setlocale(LC_ALL, "Rus");
 
 
    char a[n];
 
    cout << "Введите строку: ";
    cin.getline(a, n);
 
    int k = mylen(a);
 
    int len, number;
    
 
    cout << "Введите номер элемента начала подстроки: ";
    cin >> number;
 
    cout << "Укажите длину подстроки: ";
    cin >> len;
 
    char* str;
 
 
    str = stroka(a, number, len, k);
    cout << str << endl;
 
            
    system("pause");
    delete str;
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2019, 12:44
Ответы с готовыми решениями:

Выделить из какой-либо строки часть заданной длины, начиная с заданной позиции
Кто знает: выделить из какой-либо строки часть заданной длины, начиная с заданной позиции.

Функция выделяющая подстроку заданной длины, начиная с заданного символа
Выделить подстроку заданной длины, начиная с заданного символа. Создать функцию, которая будет...

Функция удаляет из строки заданное количество символов, начиная с заданной позиции
Подскажите, что не так в программе.? Функция удаляет из строки заданное количество символов,...

Вставка в строку другой строки, начиная с заданной позиции
class String { protected: char*str;//Указатель на массив символов int size;//Длина строки...

Получить заданное количество символов строки, начиная от заданной позиции
Вводится строка символов. Получить заданное количество символов, начиная от заданной позиции.

5
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
03.02.2019, 12:53 2
Цитата Сообщение от SokolovVolody Посмотреть сообщение
C++
8
9
    int size = 0;
    char* z = new char[size];
Блок памяти какого размера тут выделяется?
0
SokolovVolody
0 / 1 / 0
Регистрация: 30.08.2015
Сообщений: 28
03.02.2019, 13:13  [ТС] 3
Если объявлю массив в условии после расчета size , то в return z; ошибка ,мол z не объявлен.



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
char* stroka(char* temp, int positia, int dlina, int t) {
    int size = 0;
    int k = 0;
 
    if (positia > dlina)
    {
        size = dlina + positia + 1;
        char* z = new char[size];
        for (int i = positia; i < size; i++) {
            z[k] = temp[i];
            k++;
        }
        z[k] = '\0';
    }
    else
    {
        size = dlina - positia + 1;
        char* z = new char[size];
        for (int i = positia; i < size; i++) {
            z[k] = temp[i];
            k++;
        }
        z[k] = '\0';
    }
Добавлено через 7 секунд
Если объявлю массив в условии после расчета size , то в return z; ошибка ,мол z не объявлен.



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
char* stroka(char* temp, int positia, int dlina, int t) {
    int size = 0;
    int k = 0;
 
    if (positia > dlina)
    {
        size = dlina + positia + 1;
        char* z = new char[size];
        for (int i = positia; i < size; i++) {
            z[k] = temp[i];
            k++;
        }
        z[k] = '\0';
    }
    else
    {
        size = dlina - positia + 1;
        char* z = new char[size];
        for (int i = positia; i < size; i++) {
            z[k] = temp[i];
            k++;
        }
        z[k] = '\0';
    }
0
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
03.02.2019, 13:30 4
SokolovVolody, объявить можно заранее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char* stroka(char* temp, int positia, int dlina, int t) {
    char* z = nullptr;
 
    if (/* ... */) {
        //...
        z = new char[size];
        //...
    }
    else {
        //...
        z = new char[size];
        //...
    }
 
    return z;
}
Не могу понять логику ваших действий.

(1) У вас заданы позиция и длина подстроки. В чем смысл проверки if (positia > dlina)? Тут скорее всего должно быть сравнение с длиной всей строки.
(2) Параметр t в функции не используется, в функцию передается длина строки. Зачем? Объявите функцию определения длины строки перед другими функциями и применяйте по назначению.
0
Yetty
2632 / 1847 / 1218
Регистрация: 18.12.2017
Сообщений: 5,916
03.02.2019, 17:00 5
как вариант:
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
#include <iostream>
#include <string>
using namespace std;
 
void SubString (string const&s, string &s1, int pos, int len)
{
    for (int i=pos-1; i<pos-1+len; i++)
    s1+=s[i];    
}
 
int main()
{
    int pos, len;
    string s, s1;
    cout << "String:\n";
    getline(cin, s);
    
    cout << "Substring:\n";
    cout << "pos="; cin >> pos;
    cout << "len="; cin >> len;
    
    SubString (s,s1,pos,len);
    
    cout << s1 << "\n";
    
system("pause");
return 0;
}
если нужна защита от ввода неправильных значений, напишите
0
SokolovVolody
0 / 1 / 0
Регистрация: 30.08.2015
Сообщений: 28
06.02.2019, 23:30  [ТС] 6
Прошу оценки и критики по существу)

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
#include <iostream>
 
 
using namespace std;
 
 
const int n = 500;
 
 
char*str(char* a,char* sub,int pos,int len) {
        
    
    int j=0;
    for (int i = pos; i < pos + len; i++) {
 
        sub[j] = a[i];
        j++;
 
    }
    sub[j] = '\0';
 
    return 0;
}
 
int main() {
 
    setlocale(LC_ALL, "Rus");
 
    char a[n];
    int pos = 0, len = 0;
    
    cout << "Введите строку: " << endl;
    cin.getline(a,n);
    
   while (cin.fail())
   {
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cout << "Длина строки должна быть меньше "<< n <<" символов!";
    cin.getline(a, n);
    }
 
    cout << "Введите номер начального элемента подстроки: " << endl;
    cin >> pos;
    while (cin.fail())
    {
        cin.clear();
        cin.ignore(cin.rdbuf()->in_avail());
        cout << "Введите номер повторно ";
        cin >> pos;
    }
 
    cout << "Укажите длину подстроки: " << endl;
    cin >> len;
    while (cin.fail())
    {
        cin.clear();
        cin.ignore(cin.rdbuf()->in_avail());
        cout << "Введите длину повторно ";
        cin >> len;
    }
    
    
    int r = pos + len;
    char* sub=new char[r];
 
 
    str(a, sub, pos, len);
 
    cout << sub << endl;
 
    system("pause");
    delete sub;
    return 0;
}
0
06.02.2019, 23:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2019, 23:30

Удалить из строки заданное количество символов, начиная с заданной позиции
8.6.1. Помогите, пожалуйста, решить задачи в С++. Написать программу удаления из строки...

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

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


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

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

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