Пытаюсь переписать этот код, написанный на C++ в C (СИ) Код делает следующее: читает str2 если находит * читает str1 от позиции * до ближайшей < потом прибавляет ,
Результат: Test_Value,564,Test_Value2,456,Test_Value3,123,
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;
}
Переделал вот так для СИ.
#include <stdio.h>
#include <string.h>
int main(void)
{
char *make_string = NULL;
char *final_string = NULL;
char *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>";
char *str2 = "<tr> <th>*</th> <th>*</th> </tr><tr> <th>*</th> <th>*</th> </tr><tr> <th>*</th> <th>*</th> </tr>";
size_t i = 0;
char *ptr = strchr(str2, '*');
i = ptr - str2; // нашли позицию *
int position = i;
int count = 0;
while (str2[i] != NULL) // читаем строку посимвольно передвигаем указатель
{
if (str2[i] == '<') // найден <
{
printf("%c",str2[i]); // что у нас в под указателем?
}
if (i > strlen(str1))
break;
strcat (final_string,strcat(make_string, ",")); //final_string += make_string + ',';
memset(&make_string, '\0', sizeof(make_string)); //make_string = "";
count += 2;
position = i + (strlen(final_string) - count);
}
strcat(final_string, make_string); //final_string += make_string;
printf("%s\n",final_string);
return 0;
}
Вопросы: как сделать чтобы вторая функция find искала следующую звезду?
Цикл while требует внутри себя realloc для дописывания строки?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Доброго времени сутокПишу клиент-серверное приложение на С++ под Linux
Беда следующая: работаю со списком в классе(Использование STL запрещено) худо бедно расписал методыДалее когда описываю экземпляр в main и пытаюсь...
Вылетает ошибка сегментирования (сделан дамп памяти)Если не сложно, объясните, что именно не так