+ Ответить в теме
Показано с 1 по 9 из 9

Тема: Как сравнить строки в C++

  1. #1
    Привет. Столкнулся вот в SDK с такой проблемой. Может,кто нить из программистов поможет. Хочу выводить на экран персональное обращение к каждому игроку. Для этого использую:

    CvWString fff;
    CvWString ggg;
    ggg = "Петр";
    fff = getLeaderName(getOwnerINLINE());
    if (fff == ggg)
    {
    ... код
    }

    Проблема в том,что каждый раз условие не выполняется,хотя игрока зовут Петр. Весь код находится в CvCity.cpp. Может кто нить помочь?
    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  2. #2
    Дело тут не в С++, а в объекте CvWString, определенном в файле CvString.h.
    Как таковой функции сравнения строк интерфейс объекта нам не предлагает, то следует использовать классический способ из библиотеки string.h.

    Лично код не проверял, но думаю будет работать:
    Код:
    CvWString fff;
    CvWString ggg;
    ggg = "Петр";
    fff = getLeaderName(getOwnerINLINE());
    if (strcmp(fff,ggg)==0)
    {
    ... код
    }
    или так

    Код:
    CvWString fff;
    CvWString ggg;
    ggg = "Петр";
    fff = getLeaderName(getOwnerINLINE());
    if (strcmp(fff.GetCString(),ggg.GetCString())==0)
    {
    ... код
    }
    Возможно потребуется ещё привести типы исходя из сообщений компилятора.
    продвинь это сообщение в соцсеть:  

  3. #3
    Сначала подумал про концевые сиволы закрытия строк, про буквы е/ё, а ведь действительно получается, что выражение
    Код:
    (fff == ggg)
    будет давать тру только если это один и тот же объект в памяти компьютера
    продвинь это сообщение в соцсеть:  

  4. #4
    Вот что плучается в первом случае:
    CvCity.cpp
    CvCity.cpp(4309) : error C2664: 'strcmp' : cannot convert parameter 1 from 'CvWString' to 'const char *'
    No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    Process terminated with status 2 (0 minutes, 8 seconds)
    1 errors, 0 warnings

    А вот что во втором:
    CvCity.cpp
    CvCity.cpp(4309) : error C2664: 'strcmp' : cannot convert parameter 1 from 'const wchar *' to 'const char *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Process terminated with status 2 (0 minutes, 7 seconds)
    1 errors, 0 warnings

    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  5. #5
    <div class='quotetop'>Цитата(Пашок * 30.11.2008, 15:35) [snapback]270489[/snapback]</div>
    А вот что во втором:
    CvCity.cpp
    CvCity.cpp(4309) : error C2664: &#39;strcmp&#39; : cannot convert parameter 1 from &#39;const wchar *&#39; to &#39;const char *&#39;
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Process terminated with status 2 (0 minutes, 7 seconds)
    1 errors, 0 warnings
    [/b]
    Думаю, тогда стоит переписать так:

    Код:
    CvWString fff;
    CvWString ggg;
    ggg = "Петр";
    fff = getLeaderName(getOwnerINLINE());
    if (wcscmp(fff.GetCString(),ggg.GetCString())==0)
    {
    ... код
    }
    Здесь используется ф-ия wcscmp, которая работает с типами wchar*, аналогичная по функциональности strcmp.
    продвинь это сообщение в соцсеть:  

  6. #6
    Сейчас попробую. Кстати,эта функция >0 когда первое значение впереди по алфавиту?
    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  7. #7
    Не работает. Проект компилится без ошибок,но условие не выполняется. Может,функция getLeaderName(getOwnerINLINE()) даёт не то,что надо.Как бы это проверить... Пробовал и просто getName(getOwnerINLINE()). Равенства нет.
    продвинь это сообщение в соцсеть:  
    Интересная идея для заработка

  8. #8
    <div class='quotetop'>Цитата(Пашок * 30.11.2008, 18:05) [snapback]270523[/snapback]</div>
    Не работает. Проект компилится без ошибок,но условие не выполняется. Может,функция getLeaderName(getOwnerINLINE()) даёт не то,что надо.Как бы это проверить... Пробовал и просто getName(getOwnerINLINE()). Равенства нет.
    [/b]
    Мне кажется, что тут нужен ещё объект, к которому можно применить данную ф-ию. А вот какой, это нужно поискать по SDK.
    Кстати, ещё может быть проблема с кодировками. В окне редактора "Петр" - одна последовательность байт, а в игре может быть другая.
    продвинь это сообщение в соцсеть:  

  9. #9


    Если это просто игровое сообщение для игрока, то лучше делать его через питон, он для того и создан.
    продвинь это сообщение в соцсеть:  

+ Ответить в теме

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters