Пытаюсь сделать следующее: Читаем строку шаблон str2 (которая со звездочками) Если находим * , то читаем значение из str1 в соотсветствующей позиции если находим & в str2 то обработка строки прекращается.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
bool flag = false;
int start_pos_2 {};
int start_pos_1 {};
int counter {};
int tag_counter {};
int next_position_1 {};
std::string make_string {};
std::string final_string {};
std::string str1("<tr> <th>Test_Value</th> <th>56</th> </tr><tr> <th>Test_Value_2</th> <th>45</th> </tr>");
std::string str2("<tr> <th>*</th> <th>*</th> </tr><tr> <th>*</th> <th>*</th> </tr>");
size_t I = str2.find("*");
tag_counter = std::count(str2.begin(), str2.begin() + I, '>');
for (; start_pos_1 <= str1.length(), start_pos_2 <= str2.length(); start_pos_1++, start_pos_2++)
{
if (counter != tag_counter)
{
if (str1[start_pos_1] == '>')
{
counter++;
} else
continue;
}else
{
if (flag == false)
{
next_position_1 = start_pos_1;
while (str1[next_position_1] != '<')
{
make_string += str1[next_position_1];
next_position_1++;
}
flag = true;
make_string += ',';
final_string += make_string;
} else
continue;
}
}
cout << final_string << endl;
return 0;
}
Вопрос: сейчас программа находит только первую * и читает значение с тойже позиции из другой строки. Как продолжить поиск других * в строке, а также прекратить при нахождении &?
Позволил себе немного вольности в рамках вашей задачи, как я понял, вам нужно считать все значения внутри тегов по какому-то шаблону(правда, через regex, думаю, было бы проще, или скорее всего есть какой-нибудь reader для этих целей, ну да ладно):
int main()
{
std::string make_string{};
std::string final_string{};
std::string str1("<tr> <th>Test_Value</th> <th>564</th> </tr><tr> <th>Test_Value2</th> <th>456</th> </tr><tr> <th>Test_Value3</th> <th>123</th> </tr>");
std::string str2("<tr> <th>*</th> <th>*</th> </tr><tr> <th>*</th> <th>*</th> </tr><tr> <th>*</th> <th>*</th> </tr>");
size_t i = 0;
i = str2.find("*", i);
int position = i;
auto count = 0;
while (true)
{
while (str1[position] != '<')
{
make_string += str1[position];
position++;
}
i = str2.find("*", i + 1);
if (i > str1.length())
break;
final_string += make_string + ',';
make_string = "";
count += 2;
position = i + (final_string.length() - count);
}
final_string += make_string;
cout << final_string << endl;
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Что использовать в качестве общения с бд?Что-то по типу вебсокетов в nodejs также было бы неплохо
Хочу реализовать свой вектор для лучшего понимания работы данного контейнераМожете объяснить за счет чего происходит "резервирование" памяти...