V
Oder nen Vorschlag wie man folgendes verbessern kann, also das es auch mit allen Möglichkeiten geht?
Bisheriger Source für das Problem:
std::size_t find_regexp(std::string suchin, std::string suchstr)
{
using namespace std;
size_t pos = string::npos;
size_t fPos = suchstr.find('?');
size_t sPos = suchstr.find('*');
size_t kPos1 = suchstr.find('[');
size_t kPos2 = suchstr.find(']');
if(fPos!=string::npos)
{
string tmp1 = suchstr.substr(0, fPos);
string tmp2 = suchstr.substr(fPos+1);
// Schleife für genau EIN '?' !!!
for(size_t i=0; i<suchin.length(); ++i)
if(suchin.substr(i,tmp1.length())==tmp1)
if(suchin.substr(i+tmp1.length()+1,tmp2.length())==tmp2)
{
pos=i;
break;
}
}
if(sPos!=string::npos)
{
string tmp1 = suchstr.substr(0, sPos);
string tmp2 = suchstr.substr(sPos+1);
// Schleife für genau EIN '*' !!!
for(size_t i=0; i<suchin.length(); ++i)
if(suchin.substr(i,tmp1.length())==tmp1)
{
if(suchin.substr(i+tmp1.length()).find(tmp2)+i+tmp1.length()>=i+tmp1.length())
{
pos = i;
break;
}
}
}
if((kPos1!=string::npos) && (kPos2!=string::npos))
{
string tmp1 = "";
if(kPos1>0)
tmp1 = suchstr.substr(0,kPos1);
string tmp2 = suchstr.substr(kPos1+1, kPos2-kPos1-1);
pos = suchin.find(tmp1+tmp2[0]+suchstr.substr(kPos2+1));
for(size_t i = 1; i<(kPos2-kPos1-1); ++i)
if(pos>suchin.find(tmp1+tmp2[i]+suchstr.substr(kPos2+1)))
pos = suchin.find(tmp1+tmp2[i]+suchstr.substr(kPos2+1));
}
if((fPos==string::npos) && (sPos==string::npos) && ((kPos1==string::npos) || (kPos2==string::npos)))
pos = suchin.find(suchstr);
return pos;
}
Code-Hacker