Другое С/С++ Вопрос - Ответ

AdCKuY_DpO4uLa

Известный
287
477
C++:
bool srt(const wchar_t &value1, const wchar_t & value2)
{
    return (_wcsicmp((wchar_t*)value1, (wchar_t*)value2) > 0);
}
sort(*russian_names, *russian_names, srt);

Почему массив сортируется неправильно?
Потому что это бред. Тебе писали выше, использовать std::begin для получения "начала" Массива и std::end для получения "конца" Массива, ты же тупо разыменовал указатель и передал его по ссылке. Что? Зачем? Для чего? Мало того, ты потом пытаешься это снова привести к указатель. Складывается такое впечатление, что ты и доки к _wcsicmp не читал. Это функция сравнения двух строк, без учёта регистра, которая вернёт > 0, если str1 длинее str2, каким образом там должна быть сортировка, мне не известно, судя по твоему коду, твоя функция будет всегда возвращать что-то одно, причём не понятно в каких случаях что, вероятнее всего, это вообще UB(могу ошибаться)

C++:
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::wstring str{ L"awdawdawdfawawdjnsfuhjksd" };
    std::wcout << str << std::endl;
    std::sort(str.begin(), str.end());
    std::wcout << str << std::endl;

    return 0;
}
image.png
 
Последнее редактирование:
  • Клоун
Реакции: Fott

Leatington

Известный
258
71
Потому что это бред. Тебе писали выше, использовать std::begin для получения "начала" Массива и std::end для получения "конца" Массива, ты же тупо разыменовал указатель и передал его по ссылке. Что? Зачем? Для чего? Мало того, ты потом пытаешься это снова привести к указатель. Складывается такое впечатление, что ты и доки к _wcsicmp не читал. Это функция сравнения двух строк, без учёта регистра, которая вернёт > 0, если str1 длинее str2, каким образом там должна быть сортировка, мне не известно, судя по твоему коду, твоя функция будет всегда возвращать что-то одно, причём не понятно в каких случаях что, вероятнее всего, это вообще UB(могу ошибаться)

C++:
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::wstring str{ L"awdawdawdfawawdjnsfuhjksd" };
    std::wcout << str << std::endl;
    std::sort(str.begin(), str.end());
    std::wcout << str << std::endl;

    return 0;
}
image.png
Мне нужно сортировать массив wchar_t, а не строку, а begin и end с ними не работает.
 

EclipsedFlow

Известный
Проверенный
1,040
462
Как в std::sort передать массив wchar_t?

Мне нужно сортировать массив wchar_t, а не строку, а begin и end с ними не работает.
Попробуй
C++:
#include <algorithm>
#include <iostream>
#include <cstring>

bool compare(const wchar_t* a, const wchar_t* b)
{
    return (_wcsicmp(a, b) > 0);
}

int main()
{
    const wchar_t* arr[] = {L"abcd", L"efg", L"hi", L"jklmno"};
    const size_t arr_size = sizeof(arr) / sizeof(arr[0]);

    std::sort(arr, arr + arr_size, compare);

    for (size_t i = 0; i < arr_size; i++)
    {
        std::wcout << arr[i] << std::endl;
    }

    return 0;
}
 
  • Влюблен
Реакции: Leatington

AdCKuY_DpO4uLa

Известный
287
477
Мне нужно сортировать массив wchar_t, а не строку, а begin и end с ними не работает.
C++:
#include <iostream>
#include <algorithm>

int main()
{
    wchar_t arr[] = { 0x100, 0x200, 0x300, 0x105, 0x90, 0x700 };
    
    for (auto& it : arr)
        std::cout << "0x" << std::hex << it << ' ';
    std::cout << std::endl;
    
    std::sort(std::begin(arr), std::end(arr));
    
    for (auto& it : arr)
        std::cout << "0x" << std::hex << it << ' ';
    std::cout << std::endl;

    return 0;
}
image.png
 

Digger Man

Любитель Linux
Модератор
1,635
1,116
I need some function to take the color from the .INI itself that does not cause me problems, is for ImGui::ColorEdit, since the function that I use takes them like this:
Посмотреть вложение 191848
use this function to get color from ini and pass it to ImGui::ColorEdit
C++:
ImVec4 getColorFromINI(const char* key, const char* fileName)
{
    ImVec4 color;
    char buffer[256] = {};

    GetPrivateProfileString("color", key, "", buffer, sizeof(buffer), fileName);
    sscanf(buffer, "R %f G %f B %f", &color.x, &color.y, &color.z);
    color.w = 1.0f; // Alpha

    return color;
}
 

ARMOR

kjor32 is legend
Модератор
4,852
6,081
Как сделать проверку на то заспавнился ли игрок без задействования памяти SAMP?
 

ARMOR

kjor32 is legend
Модератор
4,852
6,081
plugin sdk:
CPed* pPed = FindPlayerPed();
if (pPed && pPed->IsAlive())
{
    //...
}
Пробывал делать проверку через IsAlive, но он возвращает true даже во время подключения к серверу. Мне бы что-то типо того что камера прикреплена к педу
 

jenees.21

Участник
73
8
как можно реализовать такое только на с++?
Lua:
local weapon = getCurrentCharWeapon(playerPed)
        if weapon == 24 then
 

Digger Man

Любитель Linux
Модератор
1,635
1,116
  • Нравится
Реакции: jenees.21 и ARMOR

_doomsday_

Новичок
15
3
C++:
void ReplyDialog(bool button) {
    BYTE respLen = (BYTE)strlen(szInput);
    RakNet::BitStream bsSend;
    bsSend.Write((WORD)dialog.wDialogID);
    bsSend.Write((BYTE)button);
    bsSend.Write((WORD)iSelectedItem);
    bsSend.Write(respLen);
    bsSend.Write(szInput, respLen);

    Bot::pRakInterface->RPC(&RPC_DialogResponse, &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, FALSE, UNASSIGNED_NETWORK_ID, NULL);
}

Что не так тут? Не выбираются пункты меню в одном диалоге, в другом всегда выбирается нулевой, в другом все корректно выбираются
iSelectedItem int т.к. это селектор имгуи

upd: забыл передать имя селектора
 
Последнее редактирование: