Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Сравнение строк


Автор: DubrovinAV 4.11.2007, 15:36
Приветствую. Есть, предположим, 2 строки:

Код

string s1="AAAbcd";
string s2="aaaB";


Как осуществить поиск строки s2 в s1, не учитывая регистр(наример  'A'=='a'). В данном случае s2 входит в s1.
 smile 

Заранее спасибо. 

Автор: Annihilator 4.11.2007, 17:53
Используй сначала int tolower(int ch) для перевода каждого символа в нижний регистр а потом ищи

Автор: lnlyspi 6.11.2007, 15:36
Код

//Сравнивает 2 строки БЕЗ учета регистра.
int StrCompare(char* a, char* b)  
{
  while (1)
  {
  if (*a==0) return 5;  // 5 если равны и первая строка закончилась
  if (*b==0) return 7;  // 7 если равны и вторая строка закончилась
  if (*a!=*b)
    {
    // 0 если строки не равны
    if (    ((*a)>='a')&&((*a)<='z')&&(*a!=((*b)+('a'-'A'))) ||
            ((*a)>='A')&&((*a)<='Z')&&(*a!=((*b)-('a'-'A'))) )  return 0;            
    }
  a++; b++;
  }
}


Автор: DubrovinAV 6.11.2007, 16:41
Нужно определить входит строка s2 в s1 вообще, не обязательно с первой позиции.

s1=aaabbcd
s2=bc 
^ в данном случае s2 входит в s1.

вариант с tolower не плох. можно применить стандартные средства с++;

Автор: lnlyspi 6.11.2007, 17:09
это совсем не сложно, используя привиденную выше функцию:

Код

int StrFind(char* a, char* b)
{
int i,cnt;
char *tmp;

if (strlen(a)<strlen(b));
else {tmp=a;a=b;b=tmp; };
i=strlen(b)-strlen(a);
for (cnt=0;cnt<=i;cnt++)
    {
     if (StrCompare(a,b)>0) return 1; //содержит
    b++;
    }
return 0;  // не содержит
}



Автор: DubrovinAV 6.11.2007, 17:35
Спасибо!!! smile 

Автор: Arwen 1.11.2009, 19:06
Подскажите, а как можно реализовать тоже самое, но не на С++, а на С? 

Например, если есть строка Windows 2003 Server и строка 2003. И на выводе было либо ДА (если строка 2 входит в строку 1), либо НЕТ (если строка 2 не входит в строку 1).

Я пыталась сделать вот так (здесь еще вывод с какого элемента начинается строка 2 в строке 1):
Код

 #include <stdio.h>
 #include <string.h>

int main() {
    char S1[100], S2[100];
    scanf ("%256[^\n]", S1);
    scanf ("\n%256[^\n]", S2 );
    int K, a=0;
    for(int i=0; S1[i]!=0 && a != 1; i++)
    {
        for(int j=0; S2[j]!=0 && a != 1; j++)
        {
            if(S1[i]==S2[j])
            {
                a=1;
                K=i;
            }
        }
    }
    if (a==1)
    {
        printf("YES %d\n", K);
    }
    else
        printf("NO\n");
}


Но тут проверяется только первый символ и если он совпадает - сразу выходит из цикла, как сделать чтобы проверялась вся строка?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)