Download Reference Manual
The Developer's Library for D
About Wiki Forums Source Search Contact

Ticket #975 (closed enhancement: fixed)

Opened 16 years ago

Last modified 16 years ago

Need a case insensitive find in tango.text.Ascii

Reported by: stonecobra Assigned to: kris
Priority: normal Milestone: 0.99.6
Component: Core Functionality Version: 0.99.5 Jascha
Keywords: Cc:

Description (Last modified by stonecobra)

How about something like:

int ifind(char[] what, char[] inStr) {
  for (int i = 0, i < inStr.length - what.length) { if icompare(what,inStr[i..]) return true;}
}

Change History

03/13/08 06:13:32 changed by stonecobra

  • description changed.

03/13/08 06:15:06 changed by Nietsnie

Here's another variation (modified brute force search):

static char[] _caseMap = [ 
    '\000','\001','\002','\003','\004','\005','\006','\007',
    '\010','\011','\012','\013','\014','\015','\016','\017',
    '\020','\021','\022','\023','\024','\025','\026','\027',
    '\030','\031','\032','\033','\034','\035','\036','\037',
    '\040','\041','\042','\043','\044','\045','\046','\047',
    '\050','\051','\052','\053','\054','\055','\056','\057',
    '\060','\061','\062','\063','\064','\065','\066','\067',
    '\070','\071','\072','\073','\074','\075','\076','\077',
    '\100','\141','\142','\143','\144','\145','\146','\147',
    '\150','\151','\152','\153','\154','\155','\156','\157',
    '\160','\161','\162','\163','\164','\165','\166','\167',
    '\170','\171','\172','\133','\134','\135','\136','\137',
    '\140','\141','\142','\143','\144','\145','\146','\147',
    '\150','\151','\152','\153','\154','\155','\156','\157',
    '\160','\161','\162','\163','\164','\165','\166','\167',
    '\170','\171','\172','\173','\174','\175','\176','\177',
    '\200','\201','\202','\203','\204','\205','\206','\207',
    '\210','\211','\212','\213','\214','\215','\216','\217',
    '\220','\221','\222','\223','\224','\225','\226','\227',
    '\230','\231','\232','\233','\234','\235','\236','\237',
    '\240','\241','\242','\243','\244','\245','\246','\247',
    '\250','\251','\252','\253','\254','\255','\256','\257',
    '\260','\261','\262','\263','\264','\265','\266','\267',
    '\270','\271','\272','\273','\274','\275','\276','\277',
    '\300','\341','\342','\343','\344','\345','\346','\347',
    '\350','\351','\352','\353','\354','\355','\356','\357',
    '\360','\361','\362','\363','\364','\365','\366','\367',
    '\370','\371','\372','\333','\334','\335','\336','\337',
    '\340','\341','\342','\343','\344','\345','\346','\347',
    '\350','\351','\352','\353','\354','\355','\356','\357',
    '\360','\361','\362','\363','\364','\365','\366','\367',
    '\370','\371','\372','\373','\374','\375','\376','\377',
    ];  

static char[] isearch(char[] searchStr, char[] str)
in
{
    assert(searchStr);
    assert(str);
}
body
{
    uint i2 = 0;
    for (uint i1 = 0; i1 < str.length; i1++)
    {   
        for (i2 = 0; i2 < searchStr.length; i2++)
        {
            if (_caseMap[str[i1 + i2]] != _caseMap[searchStr[i2]])
                break;
        }
        if (i2 == searchStr.length)
            return str[i1..length];
    }   
    return null;
}

03/16/08 05:54:48 changed by kris

  • status changed from new to closed.
  • resolution set to fixed.

(In [3367]) fixes #975 :: Need a case insensitive find in tango.text.Ascii

Thanks to stonecobra & nietsnie