singlepost

Сравнение строк без учета регистра, на си << На главную или назад  

Напишите программу, которая предлагает пользователю ввести две строки,
а затем сравнивает их, игнорируя "регистровые" различия, т.е. прописные и
строчные буквы ваша программа должна воспринимать как одинаковые.

мой код:
#include <iostream>
using namespace std;

int main () {
char z[80],x[90];
int i,j;
cout << "Vvedite stroka 1 ";
cin >> z;

cout << "VVedite stroky 2 ";
cin >> x;

for (i = 0; x[i]; i++) {
for (j = 0; z[j]; j++) {
if (isupper (x[i]))
x[i]=tolower(z[j]);
if (toupper (x[i]))
x[i]=islower(z[j]);
if (isupper (z[j]))
z[j]=tolower(x[i]);
if (toupper (z[j]))
z[j]=islower(x[i]);
}
}

for (i = 0; x[i]; i++) {
for (j = 0; z[j]; j++) {
if ( x[i] == z[j]){
cout << "[" << x[i] << "] = [" << z[j] << "]";
break;
}
}
}

return 0;
}
подскажите хотяб алгоритм

12 ответов в теме “Сравнение строк без учета регистра, на си”

  1. 12
    Леонид Максимов ответил:

    а разве libc не предоставляет поддержку локалей?

  2. 11
    Алексей Бобьяков ответил:

    Не только языка, но и некой культуры, то есть с учётом локалей пользователей. Вот здесь, например, об этом подробнее написано: //lafstern.org/matt/col2_new.pdf и //www.gotw.ca/gotw/029.htm

  3. 10
    Денис Лисов ответил:

    "грамотное" – то есть для произвольного языка и произвольной кодировки?

  4. 9
    Алексей Бобьяков ответил:

    Да-да, «using namespace std;» — это чистый C :-) А вообще грамотное решение задачи довольно сложное, особенно если её решать на C++.

  5. 8
    Леонид Максимов ответил:

    про начинающих, заметьте, не было сказано.
    Керниган и Ричи, затем Шилдт.

  6. 7
    Алексей Забродский ответил:

    А я за Дейтелов!

  7. 6
    Иван Мельников ответил:

    Брюс Эккель. Философия программирования. – это не слишком сложно для начинающего?

  8. 5
    Иван Мельников ответил:

    кароче посовтуйте хороший учебник по С++

  9. 4
    Евгений Гаврин ответил:

    Брюс Эккель. Философия программирования.

  10. 3
    Евгений Гаврин ответил:

    stricmp =)

  11. 2
    Евгений Гаврин ответил:

    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
    /* Compare two strings as lowercase*/
    if (0 == stricmp("hello", "HELLO"))
    printf("The strings are equivalent.\n");
    else
    printf("The strings are not equivalent.\n");
    return 0;
    }

  12. 1
    Алексей Забродский ответил:

    Юзать cmpstr, предварительно перегнав обе строки в верхний (нижний) регистр.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.