Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 256
1

Все числа, которые встречаются в строке, поместить в отдельный целочисленный массив

18.08.2019, 02:04. Показов 3864. Ответов 5

Условие: Вводится строка, содержащая буквы, целые неотрицательные числа и иные символы.
Требуется все числа, которые встречаются в строке, поместить в отдельный целочисленный массив.
Например, если дана строка "data 48 call 9 read13 blank0a",
то в массиве должны оказаться числа 48, 9, 13 и 0.

Мой код:
Кликните здесь для просмотра всего текста

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
string str, str_nums;
cout << "Введите строку: "; getline(cin, str);
int length = str.size(), k = 0;
int *arr = new int[length], index_start = -1, index_finish = -1;
bool lol = false;
for (size_t i = 0; i < length; i++)
{
    if (isdigit(str[i]))
    {
        if (index_start < 0)
            index_start = i;
        else
            index_finish = i;
        lol = true;
        continue;
    }
    if (lol)
    {
        if (index_finish < 0)
            index_finish = index_start;
        for (size_t j = index_start; j <= index_finish; j++)
            str_nums += str[j];
        for (size_t q = 0; q < str_nums.size(); q++)
        {
            arr[k] = int(str_nums[q]) - 48;
            k++;
        }
        str_nums = "";
        index_start = index_finish = -1;
        lol = false;
    }
}
 
delete[]arr;
arr = nullptr;



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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2019, 02:04
Ответы с готовыми решениями:

Требуется все числа, которые встречаются в строке, поместить в отдельный целочисленный массив
Вводится строка, содержащая буквы, целые неотрицательные числа и иные символы. Требуется все...

В строке найти все строчные буквы и поместить их в отдельный массив
Добрый день! Нужно в произвольной строке найти строчные буквы и поместить их в отдельный...

Найти все числа с массива B(n), которые встречаются больше чем в 1 строке матрицы A(m, n)
Всем привет! Я слишком слаб в Си, собственно, из-за этого тему и создаю, нужна помощь в написании...

Найти все числа из массива B (n), которые встречаются более чем в одной строке матрицы A (m, n)
Помогите,пожалуйста,переделать с VBA на Си ,или же составить программу без всяких...

5
3 / 3 / 0
Регистрация: 25.03.2018
Сообщений: 9
18.08.2019, 03: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
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <string>
#include <cctype> //isdigit
#include <cstdlib> //atoi
 
using namespace std;
 
int main ()
{
    string str{"data 48 call 9 read13 bl8ank0a68"};
    int* ar = nullptr;
    int sizeAr{0};
    for(int i{0}; i < str.length(); i++)
    {
        if(isdigit(str[i]))
            for(int j{i}; j < str.length(); j++)
                if(!isdigit(str[j]) || j+1 == str.length())
                {
                    /* Извлекаем число из строки */
                    int nElement = atoi(str.substr(i,j).c_str());
                    cout << nElement << endl;
                    /* Инициализация буфера */
                    int* nBuffer = new int[sizeAr];
                    for(int k{0}; k < sizeAr; k++)
                        nBuffer[k] = ar[k];
                    /* Увеличиваем размер массива int */
                    sizeAr++;
                    /* Осовбождаем память под новый массив */
                    if(ar) delete[] ar;
                    /* Резервируем память под новый массив */
                    ar = new int[sizeAr];
                    /* Инициализация нового массива */
                    for(int k{0}; k < sizeAr; k++)
                        ar[k] = nBuffer[k];
                    ar[sizeAr-1] = nElement;
                    /* Освобождаем буфер */
                    delete[] nBuffer;
                    i = j;
                    break;
                }
    }
    for(int i{0}; i < sizeAr; i++)
        cout << ar[i] << ((i+1 < sizeAr)? " ":"");
    return 0;
}
1
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,053
18.08.2019, 08:44 3
Ivan _pupkin, привет!
Держи код.
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    //Запрос строки
    std::string line;
    std::getline(std::cin, line);
 
    //Подготовка к считыванию чисел
    size_t len = line.length() / 2;
    int* box = new int[len];
    size_t count_in_box = 0u;
    size_t pos = 0u;
 
    //Считывание чисел из строки
    for (auto it = std::begin(line); ; )
    {
        int value;
        try
        {
            if (it == std::end(line))
                break;
            value = std::stoi(std::string(it, std::end(line)), &pos);
            if (pos)
            {
                box[count_in_box++] = value;
                if (std::distance(std::begin(line), it) + pos >= line.length())
                    break;
                std::advance(it, pos + 1);
            }
        }
        catch (const std::invalid_argument& ia)
        {
            ++it;
            continue;
        }
        catch (const std::out_of_range& oor)
        {
            std::cout << "Переполнение переменной\n";
            return 1;
        }
    }
 
    //Вывод результата на консоль
    for (auto it = box; it != box + count_in_box; ++it)
        std::cout << *it << " ";
    std::cout << "\n";
    delete[] box;
 
    return 0;
}
1
Миниатюры
Все числа, которые встречаются в строке, поместить в отдельный целочисленный массив  
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,053
18.08.2019, 08:54 4
Строка 15
Вместо
C++
1
size_t len = line.length() / 2;
Нужно
C++
1
size_t len = line.length() / 2 + 1;
1
607 / 458 / 269
Регистрация: 24.02.2017
Сообщений: 1,656
18.08.2019, 11:02 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
#include <iostream>
#include <sstream>
using namespace std;
 
int main()
{
  int *m,i=0,count=0;
  char s[]="data 48 call 9 read13 blank0a";
  stringstream str,t;
 
   while(s[i]!='\0'){
       if(!isdigit(s[i]))s[i]=' ';
       i++;
       }
 
   str<<s;
   while(str>>i) count++;
 
   m=new int[count];
  t<<s;
  int  j=0;
   while(t>>i){
      m[j]=i;
      j++;
      }
 
   for(i=0;i<count;i++)
    cout<< m[i]<<"  ";
 
 
 
  system("pause");
  return 0;
}
1
3 / 3 / 1
Регистрация: 17.12.2018
Сообщений: 256
18.08.2019, 13:11  [ТС] 6
Спасибо ребят.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2019, 13:11

Вывести все символы, которые встречаются в первой строке тексте и не встречаются в последней.
Вывести все символы, которые встречаются в первой строке тексте и не встречаются в последней.

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

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

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


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

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

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