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


Автор: ZC1989 22.9.2006, 11:49
Вот опять вопрос по работе со строками… есть строка, надо её перебрать по сомволам и каждый символ сравнивать с данным, а уже от результата сравнения применять какое-либо действие… вот пример

Код

char *ch = "WEST";
char cch;

for(int a = 0; a < (int)strlen(ch); ++a)
{
    cch = ch[a]; // получаю символ
    cout << cch;

    // пытаюсь сравнить с "W"
    if(strcmp(cch, "W") ==0)
    {
        cout << “ – YES” << endl;
}else{
    cout << “ – NO” << endl;
}
}


компилируется нормально, но после запуска ошибка на сравнении символов, в strcmp(cch, "W")

Автор: Ignat 22.9.2006, 11:59
Цитата(ZC1989 @  22.9.2006,  12:49 Найти цитируемый пост)
компилируется нормально, но после запуска ошибка на сравнении символов, в strcmp(cch, "W")


Логично. Скажите, какие аргументы принимает ф-ция strcmp? Каких типов?

Автор: ZC1989 22.9.2006, 12:02
Код

int strcmp(const char*, const char*)


Я перепробовал всё, и все возможые типы переьерал и всё что только в голову приходило.... толку нету... smile 

Автор: Ignat 22.9.2006, 12:10
Что такое символ, и что такое null-terminated string?

А вообще, то что вам нужно вместо:
Код

    if(strcmp(cch, "W") ==0)


Написать просто:
 
Код

   if(cch == 'W') //Обратите внимание на кавычки.

Автор: Syberex 22.9.2006, 12:13
всё правильно, так и должно быть, ты эту W  через cin  введи, должно работать.

Автор: Ignat 22.9.2006, 12:14
Кстати, учите ANSI C.
То что вы делаете решается проще (и быстрее!) арифметикой указателей.

Автор: ZC1989 22.9.2006, 12:16
каывчки.. мать их....  smile блин.... забыл!!!! надо перечитать вводные уроки к С++... всё этот ПХП вечно с понталыги сбивает...

сейчас всё работает, СПАСИБО!!! я с этой функцией кавыряюсь со вчерашнего вечера smile 

Автор: albertn 22.9.2006, 16:22
Цитата(Ignat @  22.9.2006,  12:14 Найти цитируемый пост)
То что вы делаете решается проще (и быстрее!) арифметикой указателей. 

То, что проще это спорно. Разве что меньше символов придется писать.
То, что быстрее тоже спорно. Если компилить в VC++, то у него оптимизатор гораздо лучше работает на классических массивах, чем на указательных, и с указателями выходит медленнее (проверенно).
На остальных компиляторах вполне возможно.

Автор: Ignat 22.9.2006, 16:27
Цитата(albertn @  22.9.2006,  17:22 Найти цитируемый пост)
То, что быстрее тоже спорно.

Я не проверял, цитировал K&R.

Но если есть сомнения, почему бы и не прогнать тест  smile 

//offtop: albertn, кстати, земляк.



Автор: albertn 22.9.2006, 16:42
Цитата(Ignat @  22.9.2006,  16:27 Найти цитируемый пост)
Я не проверял, цитировал K&R.

Я как-то одному типу пытался это утверждение доказать. В итоге написали несколько тестов, и все-же он оказался прав.
 smile Ignat у тя вроде Москва написана.

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