Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.68
_ALLEN_
3 / 3 / 0
Регистрация: 19.02.2010
Сообщений: 30
02.05.2010, 19:00     Удалить с m по n символов, перезаписать строку и показать ее на экран #1
1. Пользователь вводит строку с клавиатуры в фиксированный массив. Необходимо проверить, cколько элементов массива теперь занято и сколько свободно.

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

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

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

5. Пользователь вводит отдельно строку и символ, необходимо показать на экран номер только последнего совпадения (нумерация с единицы).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2010, 19:00     Удалить с m по n символов, перезаписать строку и показать ее на экран
Посмотрите здесь:

Дана строка символов. Изменить строку – во всех словах, имеющих нечетное количество символов, средний символ удалить. C++
Пользователь вводит отдельно строку и символ, необходимо показать на экран номера по порядку всех совпадений (нумерация с единицы) C++
C++ Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну строку не более 50 символов и выводит на экран позиции вхождени
Удалить с m по n символов, перезаписать строку и показать ее на экран C++
Удалить с m по n символов, перезаписать строку и показать ее на экран C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
02.05.2010, 19:12     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;
Acid_C@t
 Аватар для Acid_C@t
1 / 1 / 0
Регистрация: 18.09.2010
Сообщений: 5
12.10.2010, 12:11     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;}
Ruzhin
15 / 15 / 3
Регистрация: 18.01.2013
Сообщений: 17
27.02.2013, 17:28     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;
    
 
}
Vorona
Peace 2 all shining faces
 Аватар для Vorona
660 / 522 / 44
Регистрация: 05.03.2010
Сообщений: 1,256
03.03.2013, 19:51     Удалить с m по n символов, перезаписать строку и показать ее на экран #5
попробуйте cin.getline(str, sizeof(str), '\n');
так вы будете читать строку с максимальным размером sizeof(str), пока не встретится символ перевода строки \n

иначе вы читаете строку, которую ввели и весь мусор, который следует дальше в памяти
почитайте арифметику указателей и поймете почему так происходит и что это за мусор
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
27.03.2013, 22:34     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;
}
Ruzhin
15 / 15 / 3
Регистрация: 18.01.2013
Сообщений: 17
28.03.2013, 12:43     Удалить с m по n символов, перезаписать строку и показать ее на экран #7
уже разобрался... арифметика указателей здесь не при чем )... просто забыл сформировать строку... ПРИЗНАК ОКОНЧАНИЯ СТРОКИ символ "\0" а я его не ввел а массив то с запасом... вот он и выводит мусор... после символов
krigan
 Аватар для krigan
1 / 1 / 0
Регистрация: 31.10.2012
Сообщений: 92
29.09.2014, 11:00     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;
}
OnlyHope
0 / 0 / 0
Регистрация: 29.03.2015
Сообщений: 1
29.03.2015, 18:29     Удалить с m по n символов, перезаписать строку и показать ее на экран #9
Благодарность krigan, за помощь в решении задачи, очень пригодилось чтобы сложить понимание того, что нужно сделать.
Последнее решение работает!
Только лишь для учета нюансов хочется добавить две поправки.
Строка 5 - если функция main имеет тип данных int, то она должна возвращать значение, а здесь return не наблюдается. Лучше тогда использовать:
C++
1
void main ()
И в строке 26 не учтено что массив начинает отсчет с 0, а не с 1, поэтому если вводить начало нового массива - 1, то по сути начнется уже со второго элемента.
Лучше тогда сформулировать как
C++
1
for(i = m-1; i < n-1; i++)
И для пользователя понятнее как происходит отбор.
fsg
0 / 0 / 0
Регистрация: 22.06.2015
Сообщений: 1
29.08.2015, 22:17     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;
}
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1858 / 1654 / 577
Регистрация: 14.05.2014
Сообщений: 4,751
Записей в блоге: 1
Завершенные тесты: 5
29.08.2015, 22:25     Удалить с m по n символов, перезаписать строку и показать ее на экран #11
Цитата Сообщение от OnlyHope Посмотреть сообщение
если функция main имеет тип данных int, то она должна возвращать значение, а здесь return не наблюдается
по стандарту должна, компилятор автоматически добавляет return, если не находит его. А void main() не скомпилируется на g++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2016, 11:25     Удалить с m по n символов, перезаписать строку и показать ее на экран
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
madfax
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 15
27.06.2016, 11:25     Удалить с m по n символов, перезаписать строку и показать ее на экран #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;
 
}
Yandex
Объявления
27.06.2016, 11:25     Удалить с m по n символов, перезаписать строку и показать ее на экран
Ответ Создать тему
Опции темы

Текущее время: 22:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru