Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.83
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

std::string::find и кириллица - C++

25.08.2013, 21:54. Просмотров 4351. Ответов 28
Метки нет (Все метки)

есть простенький код
C++
1
2
3
4
5
6
7
8
9
#include <iostream>       // std::cout
#include <string>         // std::string
 
int main ()
{
    std::string str = "привет";
    std::cout << str.find("ве");
    return 0;
}
если в str содержится кириллица, то find работает как попало, выдаёт неверный результат.
с английскими буквами всё нормально. как бороться с этим, позарез нужен метод find, помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 21:54     std::string::find и кириллица
Посмотрите здесь:

Std::multiset::find - C++
Каким образом функция сравнивает элементы, если я не перегрузил == У меня в классе два поля, она сравнивает их оба на соответствие? ...

std:: find Не нашла элемент - C++
Как узнать, что std:: find не нашла элемент? Я почитал, что возвращает итератор на последний элемент... Т.е. почему у меня при ...

Кириллица в string или *char - C++
Подскажите как можно реализовать? (нужно сравнить string на кириллице с другим массивом или строкой на кириллице!)

Find из string.h - C++
Расскажите про функцию find из библиотеки строк. Не получается использовать, и какое значение она выдает, если в строке подстроки не...

find() from string! - C++
Ищу в строке вхождения подстроки, запоминаю номер. Если нашел, то удаляю подстроку и вставляю соответствующий ей ключ с той же позиции. ...

Как минимально просто использовать функция std::find с последовательность типа : list<myClass*> - C++
Добрый день. Как минимально просто использовать функция std::find с последовательность типа : list&lt;myClass*&gt;,если в классе перегружен...

std::map find. Получить ключ(элемент) и как записать все данные при объявлений? - C++
Вопрос первый: как получить ключ контейнера map по данным? например: // id, name std::map&lt;int, string&gt; BookMap; BookMap bookmap; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
25.08.2013, 22:47  [ТС]     std::string::find и кириллица #21
благодарю, попробую использовать его
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
25.08.2013, 23:59     std::string::find и кириллица #22
Use UTF-8, Luke!
wstring - так себе вариант. Не переносим, если собираешься работать с текстом рассмотри вариант UTF-8.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
26.08.2013, 00:02     std::string::find и кириллица #23
Цитата Сообщение от Герц Посмотреть сообщение
Use UTF-8, Luke!
wstring - так себе вариант. Не переносим, если собираешься работать с текстом рассмотри вариант UTF-8.
Так как правильно код будет выглядеть, чтоб переносился и т.д.?
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
26.08.2013, 11:04     std::string::find и кириллица #24
C++
1
2
3
4
5
int main () {
    std::string str = u8"привет";
    std::cout << str.find(u8"ве");
    return 0;
}
Как-то так, но помимо этого для общения, например, с WinAPI, понадобится конверсия UTF-8 в UTF-16 и обратно, тут можно применить свой код (он довольно прост) или какой-нибудь libiconv.
Но стоит заметить, что строки лучше хранить в отдельном файле и читать из него, а не хранить в коде. В случае с Visual C++ исходники он интерпретирует в ASCII (например с кодировкой Windows-1251) и твоя строка в коде может превратиться в крякозябры. Если строки хранить в отдельном файле, но такого не случится.
zer0mail
2323 / 1949 / 192
Регистрация: 03.07.2012
Сообщений: 6,996
Записей в блоге: 1
26.08.2013, 15:21     std::string::find и кириллица #25
На VS2010 все работает.
Миниатюры
std::string::find и кириллица  
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.08.2013, 15:23     std::string::find и кириллица #26
zer0mail, у ТС Linux.
Toshik_
1 / 1 / 0
Регистрация: 17.08.2013
Сообщений: 91
26.08.2013, 15:42     std::string::find и кириллица #27
введи библиотеку
C++
1
#include <locale>
а потом в main() вставляй
C++
1
setlocale(LC_ALL, "RUS")
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
26.08.2013, 16:37     std::string::find и кириллица #28
Toshik_, <locale.h> для setlocale. Ну или <clocale>, ибо locale никакого отношения к этой функции не имеет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 18:16     std::string::find и кириллица
Еще ссылки по теме:

String и кириллица. Вставка переноса строки после n-ного символа - C++
Добрый вечер, появилась задачи форматирования строки вывода по ширине (консольная игра с псевдографикой). Есть такой код int...

String::find работает некорректно - C++
У меня есть такая подзадача: есть строка тегов(латинские буквы в треугольных строках, если тег начинается с /, то это закрывающий), нужно...

Метод find класса string - C++
У меня задание: нужно написать программу, которая находит текст, в файле, показывает номер строки и саму строку, в которой текст находится....

std::string - C++
Господа, подскажите где можно поглядеть методы string-a литературы никакой под рукой нет, а гуглить в лоб что-то результаттов не дает. ...

std:string - C++
1. Поддерживает ли этот класс сравнение целиком строк? Каков синтаксис сравнения строк? 2. Поддерживает ли этот класс конкатенацию? Каков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zer0mail
2323 / 1949 / 192
Регистрация: 03.07.2012
Сообщений: 6,996
Записей в блоге: 1
26.08.2013, 18:16     std::string::find и кириллица #29
Цитата Сообщение от alsav22 Посмотреть сообщение
zer0mail, у ТС Linux.
Ни имел дела с разработкой в Linux. Но если бы имел, то сначала разобрался с кодировками: какие поддерживаются, какие средства поддержки есть и какие из них предпочтительнее ("родней").
Yandex
Объявления
26.08.2013, 18:16     std::string::find и кириллица
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru