Как изменить массив, удалить из него пробелы и сохранить его в новом массиве? - PullRequest
0 голосов
/ 10 мая 2019

Например, я хочу сохранить элементы этой строки в массиве, [1 2 3; 4 5 6; 7 8 9].

    string s = "[1 2 3;4 5 6;7 8 9]";
    string news[100];
    int leng1 = s.length();
    for (int i = 0; i < leng1; i++)
    {
        int v = test.find(";");
        if (v == -1)
        {
            limo[i] = s.substr(0, leng1);
            break;
        }

        limo[i] = s.substr(0, v);
        test = test.substr(v + 1, v + leng1);
    }
    string s = "[1 2 3;4 5 6;7 8 9]";

Я хочу хранить числа без пробелов и точек с запятой.

1 Ответ

1 голос
/ 10 мая 2019

Если ваша цель - сохранить эти числа в массиве int, есть способы сделать это без необходимости записывать циклы for, вызывая substr и т. Д.

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

Следующее использует std :: replace_if для замены символов и std :: istringstream для анализа строки.

#include <string>
#include <sstream>
#include <vector>
#include <iostream>
#include <algorithm>

int main()
{
    std::string s="[1 2 3;4 5 6;7 8 9]";
    // store items here
    std::vector<int> news;

    // replace unwanted characters with a space
    std::replace_if(s.begin(), s.end(), [](char ch){return ch == ']' || ch == '[' || ch == ';';}, ' ');

    // parse space delimited string into the vector
    std::istringstream strm(s);
    int data;
    while (strm >> data)
       news.push_back(data);

    // output results
    for (auto& v : news)
      std::cout << v << "\n";
}

Выход:

1
2
3
4
5
6
7
8
9

Живой пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...