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

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

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

Дана строка. Удалить из нее самую длинную подстроку, что состоит из цифр - C++

23.02.2014, 19:46. Просмотров 426. Ответов 3
Метки нет (Все метки)

Дана строка.Удалить из нее самую длинную подстроку , что состоит из цифр.
Блин я недавно изучаю строки, вот что я написал.....


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
#include <iostream>
using namespace std;
 
int main()
{
    char s[1000];
    int l=0, a[1000];
    cout << "stroka= ";
    cin.getline(s, 1000);
    for (int i = 0,j=0; i<strlen(s); i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
        {
            l++;
        }
        else
        {
            if (l>0)
            {
                a[i] = l; 
                l = 0;
            }
            l = 0;
        }
    }
    int max = 0,k;
    for (int i = 0; i < 1000; i++)
    {
    if (max<a[i])
        {
            max = a[i];
            k = i-max;
        }
    }
    
    char news[1000];
    
    for (int i = 0,j=0; i < strlen(s); i++)
    {
        if (i<k && i>max+k-1)
        {
            news[j]=s[i];
            j++;
            news[j] = '0';
        }
        
    }
    
    cout << "new stroka = ";
    cout << news;
    system("pause");
    return 0;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 19:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дана строка. Удалить из нее самую длинную подстроку, что состоит из цифр (C++):

Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а - C++
Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а. Помогите пожалуйста сделать. Заранее спасибо

Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а - C++
Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а.

Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а - C++
эта же тока подряд идущих букв а плиз помогите

Дана строка. Подсчитать самую длинную последовательность идущей подряд заданной буквы - C++
5. Обработка строк Дана строка. Подсчитать самую длинную последовательность идущей подряд заданной буквы. Именуйте темы...

Дана строка символов. Подсчитать самую длинную последовательность подряд идущих букв а. - C++
Дана строка символов. Подсчитать самую длинную последовательность подряд идущих букв а.( P.S. напишите полную программу попроще. С++ знаю...

Дана строка длиной n. Удалить из нее цифры - C++
1.Дана строка длиной n. Удалить из нее цифры (дополнительных строк не создавать) Собственно задания, буду очень благодарен в помощи...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.02.2014, 20:41 #2
Halkidik, удалить длинную подстроку только из цифр или если имеется хоть одна цифра?
Halkidik
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 6
23.02.2014, 23:13  [ТС] #3
самую длинную строку из цифр ,даже если она состоит из одного элемента, допустим если введена строка (klompa7hbhb) то нужно удалить 7

Добавлено через 3 минуты
я еще так попытался , но тоже фигня
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
char s[1000];
int l=0, a[1000];
cout << "stroka= ";
cin.getline(s, 1000);
for (int i = 0,j=0; i<strlen(s); i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
l++;
}
else
{
if (l>0)
{
a[i] = l;
l = 0;
}
l = 0;
}
}
int max = 0,k;
for (int i = 0; i < 1000; i++)
{
if (max<a[i])
{
max = a[i];
k = i-max;
}
}
cout << "new stroka = ";
cout << strcpy(&s[k], &s[k + max]);
getch();

}

Добавлено через 3 минуты
GuGo1991, я уже голову сломал.......
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
24.02.2014, 03:34 #4
Halkidik, так я не понял надо только числа удалить или всё слово?
В общем, следующий код находит из строки самое длинное слово (первое), которое содержит цифры,
удаляет эти цифры и печатает это слово без цифр. Исключая при этом некоторые символы,
такие как запятая, точка и т. д. Так что, в случае - first,second, запятая сыграет роль пробела.

Кликните здесь для просмотра всего текста
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <string>
#include <sstream>
 
bool check_func(char ch)
{
    if(ch == ' ' || ch == ',' || ch == '.' ||
       ch == '!' || ch == '?' || ch == ';' ||
       ch == ':' || ch == '(' || ch == ')' ||
       ch == '"' || ch == '<' || ch == '>')
        return true;
    return false;
}
 
bool check_num(std::string s)
{
    int index = 0;
    while(s[index])
    {
        for(int i = 0; i < 10; i++)
        {
            if((char)(((int)'0') + i) == s[index])
                return true;
        }
        index++;
    }
    return false;
}
 
int main()
{
    std::string s, temp;
    std::string* str;
    int index = 0, counter = 0, size;
    std::cout << "Enter string: ";
    getline(std::cin, s);
    
    while(s[index])
    {
        if(!check_func(s[index]))
        {                        
            while(check_func(s[index]))
            {
                index++;
            }
            counter++; 
        }
        index++; 
    }
    
    size = counter + 1; 
    str = new std::string[size];
    counter = 0;
    index = 0;
    
    while(s[index])
    {
        if(!check_func(s[index]))
        {
            temp += s[index]; 
            if(!s[index + 1])
            {
                str[counter] = temp; 
                counter++; 
            }              
        }
        else
        {
            if(temp != "") 
            {
                str[counter] = temp;
                temp.clear();
                counter++;
            }
        }
        index++;
    }
    
    size = counter;
    int max = 0, max_index = size;
    
    for(int i = 0; i < size; i++)
    {
        if(max < str[i].size() && check_num(str[i]))
        {
            max = str[i].size();
            max_index = i;
        }
    }
    
    if(max_index < size)
    {
        index = 0;
        temp = str[max_index];
        while(temp[index])
        {
            switch(temp[index])
            {
                case '0':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '1':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '2':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '3':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '4':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '5':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '6':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '7':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '8':
                    temp.replace(index, 1, "");
                    index--;
                    break;
                case '9':
                    temp.replace(index, 1, "");
                    index--;
                    break;
            }
            index++;
        }
        std::cout << temp << "\n";
    }
    delete [] str;
    
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 03:34
Привет! Вот еще темы с ответами:

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

Дана строка. Удалить из нее все лишние пробелы - C++
Дана строка. Удалить из нее все лишние пробелы, оставив между словами не более одного. Результат поместить в новую строку.

Дана символьная строка, удалить из нее путем сдвига все цифры - C++
1) Дана символьная строка, удалить из нее путем сдвига все цифры 2) Дан массив символьных строк, найти номер строки с максимальным числом...

Дана строка, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи целого числа. - C++
#include &lt;iostream.h&gt; #include &lt;string.h&gt; int main() { char st,st2; int i,j; cout &lt;&lt; &quot;Vvedite stroku&quot;; cin &gt;&gt; st; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.02.2014, 03:34
Ответ Создать тему
Опции темы

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