Одна проблема с вашим кодом заключается в том, что вы используете i
для записи в str2
.Однако, поскольку вы не хотите записывать все символы из str1
в str2
, вам нужны две индексные переменные, то есть одна для чтения, а другая для записи.
Очень простой подход для вашей задачиискать '<'
, а затем копировать все следующие символы, пока не появится '>'
.Это может выглядеть следующим образом:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char str1[50] = {"<a>1</a><b>2</b><c>3</c>"};
char str2[50] = { 0 };
int i, j;
i = 0;
j = 0;
while(str1[i] !='\0')
{
if(str1[i] == '<')
{
// Found tag
// Now copy all characters to str2 until end-of-tag is found
do
{
str2[j++] = str1[i++];
if (str1[i] =='\0') exit(1); // Unexpected format.. terminate
} while (str1[i] != '>');
str2[j++] = str1[i]; // Also copy the '>'
}
++i;
}
printf("%s\n",str2);
}
Однако обратите внимание, что синтаксический (пользовательский) ввод является довольно сложной задачей, потому что вам нужно обрабатывать все виды ошибок во входных данных.Приведенный выше код не имеет (почти) никакой проверки ошибок и поэтому бесполезен для передачи реального (пользовательского) ввода.Код обрабатывает только «правильно сформированный» ввод.