3 / 3 / 0
Регистрация: 19.02.2010
Сообщений: 30
1

Удалить с m по n символов, перезаписать строку и показать ее на экран

02.05.2010, 19:00. Показов 13688. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1. Пользователь вводит строку с клавиатуры в фиксированный массив. Необходимо проверить, cколько элементов массива теперь занято и сколько свободно.

2. Показать на экран с m по n символов строки, введенной пользователем и записать данный отрезок в другой массив. (m и n также вводятся пользователем)

3. Удалить с m по n символов, перезаписать строку и показать ее на экран.

4. Пользователь вводит отдельно строку и символ, необходимо показать на экран номера по порядку всех совпадений (нумерация с единицы).

5. Пользователь вводит отдельно строку и символ, необходимо показать на экран номер только последнего совпадения (нумерация с единицы).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2010, 19:00
Ответы с готовыми решениями:

Удалить с m по n, символов, перезаписать строку и показать ее на экран
Удалить с m по n символов, перезаписать строку и показать ее на экран. С использованием строк.

Удалить с m по n символов, перезаписать строку и показать ее на экран
Удалить с m по n символов, перезаписать строку и показать ее на экран. К примеру массив на 10...

Удалить с m по n символов, перезаписать строку и показать ее на экран
Уважаемые форумчане! Подскажите, как исправить ошибку? Проблема в том, что удаляет символы с...

Удалить с m по n символов, перезаписать строку и показать ее на экран
Удалить с m по n символов, перезаписать строку и показать ее на экран

11
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
02.05.2010, 19:12 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
#include <iostream>
#include <cstring>
 
.....
 
const int len = 10;
char str[len];
 
//=================================================== 1
std::cin >> str;
std::cout << "Zaniato: " << strlen(str) << "\nSvobodno: " << len - strlen(str) << std::endl;
 
//=================================================== 2
int m = strlen(str)+1, n = strlen(str)+1;
while(m >= strlen(str) && n > strlen(str))
    std::cin >> m >> n;
 
char *str1 = new char[n-m];
int i, j = 0;
for(i = m; i < n; i++){
    std::cout << str[i];
    str1[j] = str[i];
    j++;
}
std::cout << std::endl << str1;
delete[] str1;
1
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 5
12.10.2010, 12:11 3
а можна и проще...

C
1
2
3
4
5
6
7
8
9
#include<iostream>
#include<stdio.h>
using namespace std;
void main(){
int A=265, L;
char *mas=new char[A];
gets(mas);
L=strlen(mas);
cout<<"\nOccupied elements: " <<L <<"\nFree elements: " <<A-L;}
0
18 / 18 / 5
Регистрация: 18.01.2013
Сообщений: 17
27.02.2013, 17:28 4
при решении задачи №2 при выводе итоговой строки методом cout<<str1 выводит то что нужно + мусор... почему? как от этого мусора избавиться? при выводе с использованием цикла все нормально... вот код:
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
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int size=200;
    char str[size];
 
    cout <<"Введите строку (текст) размером не более " <<size <<" символов включая пробелы" <<endl;
 
    cin.getline(str,sizeof(str));
    int m;
    do
    {
    cout <<"Введите левую границу: номер элемента " <<endl;
        
    cin >> m;
    }
    while (m<0 || m>=size);
 
    int n;
    do
    {
    cout <<"Введите правую границу: номер элемента " <<endl;
    
    cin >> n;
    }
    while (n<=m || n>=size);
    
    char *str1;
    str1=new char [n-m+1];
 
    
    for (int i=m-1, j=0; i<n; i++)
    {
        *(str1+j)=*(str+i);
        j++;
    }
 
    for (int i=0; i<n-m+1;i++)
    {
        cout << str1[i];
    }
 
    cout <<endl;    
 
    cout <<str1 <<endl; //выводит то что нужно + мусор!!!
 
    delete []str1;
    
 
}
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
03.03.2013, 19:51 5
попробуйте cin.getline(str, sizeof(str), '\n');
так вы будете читать строку с максимальным размером sizeof(str), пока не встретится символ перевода строки \n

иначе вы читаете строку, которую ввели и весь мусор, который следует дальше в памяти
почитайте арифметику указателей и поймете почему так происходит и что это за мусор
0
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
27.03.2013, 22:34 6
Я решаю задачу № 2. Получается, что вводя любые буквы, находящиеся в массиве все время выводит No elements.


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
# include <iostream>
# include <conio.h>
# include <stdio.h>
 
using namespace std;
 
void main ()
 
{
int i=0;
const int size=400;
char str[size];
 
cout<<"Please enter text of \t" <<size<<"\t including gaps"<<endl;
//cin>>arr;
 
gets (str);
 
int m; //левый элемент
 
    cout<<"Enter left element"<<' '<<endl;
    cin>>m;
    
int n; //правый элемент
 
cout<<"Enter right element"<<' '<<endl;
cin>>n;
 
 
if (m-1<0 || m>=strlen(str))
cout<<"No element"<<endl;
 
else
    char str1;
    char* str1=new char [n-m+1];
    for (int i=m-1, j=0; i<n; i++)
    {
        *(str1+j)=*(str+i);
        j++;
    }
 
    for (int i=0; i<n-m+1;i++)
    {
        cout << str1[i];
 
    cout <<endl;    
 
    cout <<str1 <<endl; 
 
    delete[] str1;
}
0
18 / 18 / 5
Регистрация: 18.01.2013
Сообщений: 17
28.03.2013, 12:43 7
уже разобрался... арифметика указателей здесь не при чем )... просто забыл сформировать строку... ПРИЗНАК ОКОНЧАНИЯ СТРОКИ символ "\0" а я его не ввел а массив то с запасом... вот он и выводит мусор... после символов
0
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
29.09.2014, 11:00 8
Так выводит правильно:
cout << endl << str1['\n'];

Добавлено через 17 минут
Так выводит правильно:

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
# include <iostream>
# include <conio.h>
# include <stdio.h>
 
using namespace std;
 
void main ()
 
{
int i=0;
const int size=400;
char str[size];
 
cout<<"Please enter text of \t" <<size<<"\t including gaps"<<endl;
//cin>>arr;
 
gets (str);
 
int m; //левый элемент
 
    cout<<"Enter left element"<<' '<<endl;
    cin>>m;
    
int n; //правый элемент
 
cout<<"Enter right element"<<' '<<endl;
cin>>n;
 
 
if (m-1<0 || m>=strlen(str))
cout<<"No element"<<endl;
 
else
    char str1;
    char* str1=new char [n-m+1];
    for (int i=m-1, j=0; i<n; i++)
    {
        *(str1+j)=*(str+i);
        j++;
    }
 
    for (int i=0; i<n-m+1;i++)
    {
        cout << str1[i];
 
    cout <<endl;  
    
 
    delete[] str1;
}
Строка 48 лишняя

Добавлено через 11 минут
Рабочее решение задания №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
#include <iostream> 
#include<string>
using namespace std; 
 
int main() 
{ 
 setlocale(0, "rus");
 const int len = 100;
 char str[len]; 
 
 cout<<" Заполните строку символами: ";
 cin.getline(str, sizeof(str),'\n'); 
 
int m = strlen(str)+1, n = strlen(str)+1;
cout<<" Заполните диапазон вывода строки: \n";
cout<<" Номер символа слева: ";
 
while(m >= strlen(str) && n > strlen(str))
cin >> m;
 
cout<<" Номер символа справа: ";
cin>> n;
cout<<" Результат: ";
char *str1 = new char[n-m];
int i, j = 0;
for(i = m; i < n; i++){
    cout << str[i];
    str1[j] = str[i];
    j++;
}
 
cout<<"\n ";
 
delete[] str1;
}
0
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 1
29.03.2015, 18:29 9
Благодарность krigan, за помощь в решении задачи, очень пригодилось чтобы сложить понимание того, что нужно сделать.
Последнее решение работает!
Только лишь для учета нюансов хочется добавить две поправки.
Строка 5 - если функция main имеет тип данных int, то она должна возвращать значение, а здесь return не наблюдается. Лучше тогда использовать:
C++
1
void main ()
И в строке 26 не учтено что массив начинает отсчет с 0, а не с 1, поэтому если вводить начало нового массива - 1, то по сути начнется уже со второго элемента.
Лучше тогда сформулировать как
C++
1
for(i = m-1; i < n-1; i++)
И для пользователя понятнее как происходит отбор.
0
0 / 0 / 0
Регистрация: 22.06.2015
Сообщений: 1
29.08.2015, 22:17 10
простое решение задачи №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
 #include<Windows.h>
#include <iostream>
using namespace std;
#pragma warning (disable : 4996)
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int N = 333;
    char str[N];
 
    char s;
 
    cout << " Введите текст  до " << N << "\t символов,  включая пробелы " << endl;
    gets(str);
    cout<<" Вы ввели: " << str << endl;
 
    cout << "Введите искомый символ " << endl;
    cin >> s;
    char * pch = strrchr(str, s);
    cout << "Последнее совпадение искомого символа:" << s << " находится на позиции " << (pch - str + 1) << endl;
}
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
29.08.2015, 22:25 11
Цитата Сообщение от OnlyHope Посмотреть сообщение
если функция main имеет тип данных int, то она должна возвращать значение, а здесь return не наблюдается
по стандарту должна, компилятор автоматически добавляет return, если не находит его. А void main() не скомпилируется на g++
0
2 / 2 / 2
Регистрация: 05.06.2016
Сообщений: 15
27.06.2016, 11:25 12
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
#include <string.h>
 
using::std::cout;
using::std::endl;
 
void main(){
    /*
        //1
    int len;
    char *str = new char[40];
    cout << "Enter some string (max 39 char)\n";
    gets(str);
    len = strlen(str);
    cout << "\nIn use   :" << len;
    cout << "\nAvailable:" << 40 - 1 - len << endl;
    delete[]str;
    */
 
    /*
        //2
    int len;
    char *str = new char[20];
    char *res = new char[20];
    char *pm, *pn;
 
    int m = 4, n = 8;
    gets(str);
    len = strlen(str);
 
    if (m > 0 && m < n && n < len){
        pm = str + m - 1;
        pn = str + n - 1;
 
        *pn = NULL;
 
        strcpy(res, pm);
        cout << endl << res << endl;
    }
 
    delete[]str;
    delete[]res;
    */
 
    /*
        //3
    int len;
    char *str = new char[20];
    char *pm, *pn;
 
    int m = 4, n = 8;
    gets(str);
    len = strlen(str);
 
    if (m > 0 && m < n && n < len){
        pm = str + m - 1;
        pn = str + n - 1;
        *pm = NULL;
        strcat(str, pn);
        cout << endl << str << endl;
    }
 
    delete[]str;
    */
 
    /*
        //4
    int i = 0;
    char *str = new char[20];
    char s = 'a';
    gets(str);
 
    if (strlen(str) > 2)
    while (*(str + i) != '\0'){
 
        if (*(str + i++) == s)
            cout << i << endl;
    }
 
    delete[]str;
    */
 
        //5
    char *str = new char[20], *p;
    char s = 'a';
    gets(str);
 
    if (strlen(str) > 2){
        p = strrchr(str, s);
 
        if (p)
            cout << strlen(str) - strlen(p) + 1;
    }
 
    delete[]str;
 
}
0
27.06.2016, 11:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2016, 11:25
Помогаю со студенческими работами здесь

Удалить с m по n символов, перезаписать строку и показать ее на экран
Знает кто-то, как решить данную задача на С++? При помощи строк? Удалить с m по n символов,...

Удалить с m по n символов, перезаписать строку и показать ее на экран
Что неправильно в решении? задание : Удалить с m по n символов, перезаписать строку и показать ее...

Удалить символы и перезаписать строку
Здравствуйте! Нужно удалить с m по n символов, перезаписать строку и показать ее на экран. Вот...

Ввести строку символов. Удалить из строки все символы, не являющиеся цифрами. Результат вывести на экран.
Задача 1. Ввести строку символов. Удалить из строки все символы, не являющиеся цифрами. Результат...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru