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

0x73616D

Активный
140
42
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:
image.png
 

Leatington

Известный
258
73
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);

Почему массив сортируется неправильно?
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
314
660
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
73
Потому что это бред. Тебе писали выше, использовать 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,043
474
Как в 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

Адский дрочер
Друг
314
660
Мне нужно сортировать массив 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 Man52

52NGG
Проверенный
1,122
987
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

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

ARMOR

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