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


Автор: GRON 29.11.2003, 15:05
Только сильно не бейте, я еще совсем новичок...
Знаю, что существует функция, сравнивающая две строки. Вот решил в образовательных целях написать свой выриант.
Код
#include <stdio.h>
#include <iostream.h>
#include <string.h>
int main (int nNumberofArgs, char* pzArgs[])
{
for(;;)
{
int a;
char szPassOr[]="BUM";
char szPassword[5];
cout << "Vvedite parol";
cin.getline(szPassword,3);
for(int n=0; szPassOr[n] == szPassword[n]; n++)
{
 if(szPassOr == 0)
 {
  cout << "Verno\n";
  a=1;
  break;

 }
}
if(a==1) continue;
cout << "Neverno\n";
}
return 0;
}

Почему-то не прет...
Плиз, в чем ошибка (а их много...)
Всем заранее спаибо.

Автор: GRON 29.11.2003, 18:03
Да, и еще - просьба не пинать за то, что строки через массивы - плохой стиль программирования... Просто мне сейчас хочется именно так - через массивы...

Автор: _hunter 29.11.2003, 18:14
По-моему лучше писать так(если ты используеш <string>):
Код
string szPassOr("BUM");
string szPassword;
cout << "Vvedite parol";
std::cin.getline(&(szPassword[0]),5);
if ( szPassOr != szPassword ) cout << "Neverno\n";

Автор: _hunter 29.11.2003, 22:38
сорри - тема обновилась во время ответа smile.gif
попробуй так:
Код
#include <stdio.h>
#include <iostream.h>
#include <string.h>
int main (int nNumberofArgs, char* pzArgs[]){
for(;;){
 int a=1;
 char szPassOr[]="BUM";
 char szPassword[5];
 cout << "Vvedite parol";
 cin.getline(szPassword,3);
 for(int n=0; i < 3; n++){
   if (szPassOr[n] != szPassword[n]){
     a=0;
     break;
   }
 }
 if(a!=1) cout << "Neverno\n";
   else cout << "Verno\n";
 }
 return 0;
}

Автор: Ars 1.12.2003, 10:33
Цитата
for(int n=0; szPassOr[n] == szPassword[n]; n++)
{
if(szPassOr == 0)
{
  cout << "Verno\n";
  a=1;
  break;

}
}

Наверное, ты имел ввиду if(szPassOr[n] == 0)

Автор: Unregistered 1.12.2003, 13:01
во во, я тоже смотрю, проверка на конец строки какаято левая

Автор: GRON 1.12.2003, 14:12
Код
#include <stdio.h>
#include <iostream.h>
#include <string.h>
int main (int nNumberofArgs, char* pzArgs[])
{
for(;;)
{
int a=0;
char szPassOr[]="BUM";
char szPassword[4];
cout << "Vvedite parol ";
cin.getline(szPassword,4);
for(int n=0; szPassOr[n] == szPassword[n]; n++)
 {
  if(szPassword[n] == '\0')
  {
   cout << "Verno\n";
   a=1;
   break;

  }
 }
if(a==1)
 {
 continue;
 }
cout << "Neverno\n";
}
return 0;
}

Во, теперь проперло. Ошибок было две - первую вы уже указали, а вторая - то, что у меня cin.getline(szPassword,3); стояло, поэтому он мне последний символ введенного BUM заменял на ноль-символ, а теперь для ноля есть отдельное место.
Но теперь другая проблема: я пишу - BUM, он выводит следующее:
Код
Verno
Vvedite parol Neverno
Vvedite parol

то есть фактически еще раз прокатывает меня по циклу проверки, не предлагая при этом новый ввод. ХЕЛП!!

Автор: Mellorn 3.12.2003, 15:35
Народ, обясните мне -идиоту тупому... я уже давольно долго кодю на СИ но такого - for(;;) еще не видел что это такое? И не правильней ли будит использовать while
char key=1;
while(key==1)
{
.. // пароль введен верно
key=0;
}

Автор: GRON 3.12.2003, 22:14
Мне всегда казалось, что for(;;) - бесконечный цикл (то есть он не проверяет никаких условий).
Здесь я сделал его для того, чтобы после окончания проверки пароля программа не закрывалась, а начинала работать заново.

Автор: Mellorn 3.12.2003, 22:45
Есть теория, что это поганые cin cout... попробуй с printf() scanf();
Мне кажется он после одного нормального цикла пролетает еще один, где строке присваивается '\0'
отсюда приглашение "Введите пароль" , а потом сразу говорит то, что "\0" не рано "БАМ" -"НЕВЕРНО"


Автор: [ss]3L33T@ 5.12.2003, 14:08
2 Mellorn:
for(;;) - это бесконечноый цикл. Если ты его используешь, то надо чтобы где-то в коде(внутри цикла) стоял break, иначе - цикл никогда не закончится. Ещё: цикл загружает процессор на 100%.

Автор: MaloY 5.12.2003, 20:47
Цитата(GRON @ 29.11.2003, 18:03)
Да, и еще - просьба не пинать за то, что строки через массивы - плохой стиль программирования... Просто мне сейчас хочется именно так - через массивы...

ЭЭЭ, народ, а как лучше задавать строки... Соответствуясь с хорошим стилем программирования. И будет ли енто относиться к словам?

Автор: Mellorn 5.12.2003, 21:13
смотри на первое сообщение huntera в этой теме... он там показал , при помощи <string.h>
,а со словами (если ты имеешь ввиду WORD) ни какой связи =)
to[ss]3L33T@ спасибо тебе, не предсталяю тока нафиг это надо =)

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