Тема: Знайти всі значення між даними символами і записати в масив

Доброго часу доби!
задача виглядає так:
є рядок

<div id="header"><a href="http://mysite.com">MySite</a></div>

в рядку може бути скільки завгодно посилань та символів \n, рядок я маю на увазі String
треба в цьому рядку знайти всі записи між <a href=" та "> та записати їх в масив (хоч char*, хоч String - не важливо)
От як це зробити? Люди говорили що є вбудована функція класу стрінг, не можу знайти яка саме

2 Востаннє редагувалося dot (10.08.2019 23:13:02)

Re: Знайти всі значення між даними символами і записати в масив

Я не дуже знаю ся, але як тут з regexʼom?

/<a .*?href="(.*?)".*?>/

3

Re: Знайти всі значення між даними символами і записати в масив

Я не знаю, що таке regex, і гуглити ліньки  8)
Мені б щось наподобі цього

char* str="<div id=\"header\"><a href=\"http://mysite.com\">MySite</a></div>";
char** buf=new char*[1024];
int index=0;
for (int i=0; i<1024; i++) buf[i]=new char[1024];
if(!str); else
{
    for(int i = 0; i < strlen(str); i++)
        if(str[i] == '<')
            for(int j = 0; j < i; j++)
                if(str[i + j] == 'a')
                    for(int a = 0; a < j; a++)
                        if( str[i + j + a    ] == 'h' &&
                            str[i + j + a + 1] == 'r' &&
                            str[i + j + a + 2] == 'e' &&
                            str[i + j + a + 3] == 'f' &&
                            str[i + j + a + 4] == '=' &&
                            str[i + j + a + 5] == '"'
                        ) {
                            for(int b = 0; b < a; b++)
                                if(b > 1024) break;
                            buf[index][b] = str[i + j + a + b];
                            if(str[i + j + a + b + 1] == '\"') i++, break;
                        }
}
Оригінал
char* str="<div id=\"header\"><a href=\"http://mysite.com\">MySite</a></div>";
char** buf=new char*[1024];
int index=0;
for (int i=0; i<1024; i++) buf[i]=new char[1024];
if(!str); else
{
for (int i=0; i<strlen(str); i++) if (str[i]=='<') for (int j=0; j<i; j++) if (str[i+j]=='a') for (int a=0; a<j; a++) if (str[i+j+a]=='h'&&str[i+j+a+1]=='r'&&str[i+j+a+2]=='e'&&str[i+j+a+3]=='f'&&str[i+j+a+4]=='='&&str[i+j+a+5]=='"') {for (int b=0; b<a; b++) if(b>1024) break; buf[index][b]=str[i+j+a+b]; if (str[i+j+a+b+1]=='\"') i++, break;}
}

4

Re: Знайти всі значення між даними символами і записати в масив

Помилку там допустив, ну короче поки що в мене так, мож є щось більш продуктивне?

5

Re: Знайти всі значення між даними символами і записати в масив

std::string::find
std::string::substr