Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ Поиск символов в буфере

  • Автор темы Автор темы seven_up
  • Дата начала Дата начала
Всем Рептилойдам - Рен ТВ
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
542
Реакции
92
Как найти в буфере определённые символы?

C++:
Expand Collapse Copy
static char buf[15];
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это строка, ее размер 15 байт. Где сама строка, ты добавил просто ее определение.
 
Последнее редактирование:
говнокод но мне пох ваа ээ

C++:
Expand Collapse Copy
#include <iostream> //std::cout

bool first_occurrence = true;  // если надо найти только первое упоминание

int main() {

    static char buf[15] = "aacdefghijklmn"; // 15 char

    for (int i = 0; i < 15; i++) {
        std::string s(1, buf[i]);

        if (s == "a") {
            std::cout << "Letter - " << buf[i] << " - found! Location: " << i << " Address: " << static_cast<void*>(&buf[i]) << std::endl;

            if (first_occurrence)
                break;
        }
    }
}

/*
**first_occurrence = true**
* output:
* Letter - a - found! Location: 0 Address: 00B70008
*
**first_occurrence = false**
* output:
* Letter - a - found! Location: 0 Address: 00090004
* Letter - a - found! Location: 1 Address: 00090005
*/

либо так..
C++:
Expand Collapse Copy
#include <iostream> //std::cout

int main() {

    static char buf[15] = "aacdefghijklmn"; // 15 char
    const char* search[5] = { "a","c","d","f","g" };
    int index[5] = { 0, 0, 0, 0, 0 };

    for (int i = 0; i < 15; i++) {
        std::string s(1, buf[i]);

        for (int b = 0; b < 5; b++) {

            if (s == search[b]) {

                index[b]++;

                std::cout << "found: " << buf[i] << " [" << index[b] << "] | buffer idx: " << i << " | search char: " << search[b] << " | search idx: " << b << " | mem: " << static_cast<void*>(&buf[i]) << std::endl;
           
            }
        }
    }
}
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Так что в ней будет и что найти нужно?
 
говнокод но мне пох ваа ээ

C++:
Expand Collapse Copy
#include <iostream> //std::cout

bool first_occurrence = true;  // если надо найти только первое упоминание

int main() {

    static char buf[15] = "aacdefghijklmn"; // 15 char

    for (int i = 0; i < 15; i++) {
        std::string s(1, buf[i]);

        if (s == "a") {
            std::cout << "Letter - " << buf[i] << " - found! Location: " << i << " Address: " << static_cast<void*>(&buf[i]) << std::endl;

            if (first_occurrence)
                break;
        }
    }
}

/*
**first_occurrence = true**
* output:
* Letter - a - found! Location: 0 Address: 00B70008
*
**first_occurrence = false**
* output:
* Letter - a - found! Location: 0 Address: 00090004
* Letter - a - found! Location: 1 Address: 00090005
*/

либо так..
C++:
Expand Collapse Copy
#include <iostream> //std::cout

int main() {

    static char buf[15] = "aacdefghijklmn"; // 15 char
    const char* search[5] = { "a","c","d","f","g" };
    int index[5] = { 0, 0, 0, 0, 0 };

    for (int i = 0; i < 15; i++) {
        std::string s(1, buf[i]);

        for (int b = 0; b < 5; b++) {

            if (s == search[b]) {

                index[b]++;

                std::cout << "found: " << buf[i] << " [" << index[b] << "] | buffer idx: " << i << " | search char: " << search[b] << " | search idx: " << b << " | mem: " << static_cast<void*>(&buf[i]) << std::endl;
          
            }
        }
    }
}
память выделяешь, не круто... то же самое но без выделения памяти
Код:
Expand Collapse Copy
#include <iostream>

#define ARRAYSIZE( arr )  ( sizeof( arr ) / sizeof( *( arr ) ) )

int main( )
{
    char buf[ 15 ] = "aacdefghijklmn";
    char search_to[ ] = { 'a', 'c', 'd', 'f', 'g' };

    for ( auto i = 0; i < ARRAYSIZE( buf ); i++ )
    {
        for ( auto j = 0; j < ARRAYSIZE( search_to ); j++ )
        {
            if ( buf[ i ] == search_to[ j ] )
            {
                std::cout << "found " << buf[ i ] << " at " << i << " index, address: " << reinterpret_cast< void* >( &buf[ i ] ) << std::endl;
            }
        }
    }
}
 
upd: то что мне нужно можно реализовать при помощи sscanf
 
Последнее редактирование:
Скорее всего неправильно проверяешь на вхождение в строке с помощь strstr.
Я уже это решил по средствам создания собственного флага.

Для тех кто использует имгуи:
1643892745380.png
C++:
Expand Collapse Copy
if (flags & ImGuiInputTextFlags_Castom)
            if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9'))
                return false;
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу