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

Digger Man52

52NGG
1,096
984
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как перебирать строку по символам через цикл, используя std::string?

Способы отсюда не предлагайте. При виде символа цикл завершается
C++:
std::string str = "Hello world!";
for (size_t i = 0; i < str.size(); i++) {
        char c = str[i];
        std::cout << c << std::endl;
    }
 
  • Нравится
Реакции: Sadow

RazorRw

t.me/sssecretway | ТГК: t.me/razor_ware
Всефорумный модератор
2,008
3,374
  • Нравится
Реакции: inexplica

Digger Man52

52NGG
1,096
984
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
При виде пробела не идёт дальше.
Например текст равен "test probela", а выводит оно "test"
C++:
std::string str = "Hello world!";
for (size_t i = 0; i < str.size(); i++) {
    char c = str[i];
    std::cout << c;
}
std::cout << std::endl;

или можно заменить std::endl на std::cout << '\n', когда он встречает пробел, он выводит символ новой строки и переходит на следующую строку
 
  • Нравится
Реакции: p1cador

VRush

https://t.me/vrushscript
2,399
1,206
C++:
if (isKeyJustPressed(164)){
    bool dialogActive = SF->getSAMP()->getDialog()->iIsActive;
    sampAddChatMessage("%d", dialogActive);
    if (dialogActive) {
        int id = SF->getSAMP()->getDialog()->DialogID;
        SF->getSAMP()->sendDialogResponse(3, 1, 0, "");
        sampAddChatMessage("%d", id);
    }
};

чет не работает sendDialogResponse
И еще, как юзать хуки?
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,757
4,895
C++:
std::string str = "Hello world!";
for (size_t i = 0; i < str.size(); i++) {
    char c = str[i];
    std::cout << c;
}
std::cout << std::endl;

или можно заменить std::endl на std::cout << '\n', когда он встречает пробел, он выводит символ новой строки и переходит на следующую строку
Че

При виде пробела не идёт дальше.
Например текст равен "test probela", а выводит оно "test"
Че
 
  • Ха-ха
  • Bug
  • Нравится
Реакции: Vespan, sc6ut и ARMOR

Dark_Knight

Me, me and me.
Друг
4,080
2,112
При виде пробела не идёт дальше.
Например текст равен "test probela", а выводит оно "test"
Чего блять?
1681232890426.png
 
  • Нравится
Реакции: Z3roKwq

VRush

https://t.me/vrushscript
2,399
1,206
как сделать задержку в функции?
чтобы внутри while (1) {} было что то типа wait(500);
 

Leatington

Фанат Рейзора
263
75
Использую в проекте "Use Multi-Byte Character Set". Заметил, что при работе с sqlite3_open (www.sqlite.org) и наличии русских символов в пути к базе возвращает unable to open database file. Как решить проблему?
 

Digger Man52

52NGG
1,096
984
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Использую в проекте "Use Multi-Byte Character Set". Заметил, что при работе с sqlite3_open (www.sqlite.org) и наличии русских символов в пути к базе возвращает unable to open database file. Как решить проблему?
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
 
  • Нравится
  • Влюблен
Реакции: Z3roKwq и Leatington

Leatington

Фанат Рейзора
263
75
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
(обновлено), получилось с помощью следующей функции, спасибо.


C++:
std::string CP1251_to_UTF8(const char* str)
{
    std::string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u) { return 0; }
    wchar_t* ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(65001, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char* cres = new char[result_c];
    if (!WideCharToMultiByte(65001, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}


Код:
std::string res = CP1251_to_UTF8(path.c_str());

sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
    std::cout << "Error! Code: #2. Text: " << sqlite3_errmsg(users) << "." << std::endl;
}
 
  • Нравится
Реакции: Z3roKwq

Musaigen

ihatemyself
Проверенный
1,710
1,610
(обновлено), получилось с помощью следующей функции, спасибо.


C++:
std::string CP1251_to_UTF8(const char* str)
{
    std::string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u) { return 0; }
    wchar_t* ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(65001, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char* cres = new char[result_c];
    if (!WideCharToMultiByte(65001, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}


Код:
std::string res = CP1251_to_UTF8(path.c_str());

sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
    std::cout << "Error! Code: #2. Text: " << sqlite3_errmsg(users) << "." << std::endl;
}
мемори лик в 19 строке, и вроде функцию можно укоротить в два вызова (но это не точно)