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

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

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

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

25.08.2013, 21:54. Просмотров 4459. Ответов 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; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 21:56     std::string::find и кириллица #2
В начале main():
C++
1
setlocale(LC_ALL, "RUS");
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
25.08.2013, 22:01  [ТС]     std::string::find и кириллица #3
Пробовал, не взлетело.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bernhardt@NP355V4C:~$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 22:03     std::string::find и кириллица #4
C++
1
wstring
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
25.08.2013, 22:10  [ТС]     std::string::find и кириллица #5
ругается, не компилирует.
C++
1
main.cpp:7:21: error: conversion from ‘const char [13]’ to non-scalar type ‘std::wstring {aka std::basic_string<wchar_t>}’ requested
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 22:13     std::string::find и кириллица #6
Цитата Сообщение от [WRG] Посмотреть сообщение
Пробовал, не взлетело.
Очень даже взлетело.
Миниатюры
std::string::find и кириллица  
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
25.08.2013, 22:14     std::string::find и кириллица #7
[WRG], попробуйте в начале main написать
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
и еще шрифт в самой консоле поменять на Lucida Console
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
25.08.2013, 22:15     std::string::find и кириллица #8
BigLow, эти функции ставят кодовые страницы консоли, при чем тут string?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 22:15     std::string::find и кириллица #9
Цитата Сообщение от [WRG] Посмотреть сообщение
Пробовал, не взлетело.
Среда? ОС?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 22:15     std::string::find и кириллица #10
Цитата Сообщение от [WRG] Посмотреть сообщение
ругается, не компилирует.
C++
1
main.cpp:7:21: error: conversion from ‘const char [13]’ to non-scalar type ‘std::wstring {aka std::basic_string<wchar_t>}’ requested
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
  {
  setlocale(LC_ALL,"");
  std::wstring string(L"привет");
  std::wstring search_string(L"ве");
  std::wcout<<"Position of "<<search_string<<" in "<<string<<" : "<<string.find(search_string)<<std::endl;
  system("pause");
  return 0;
  }
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
25.08.2013, 22:16  [ТС]     std::string::find и кириллица #11
попробуйте с другим словом, может совпало?
у меня не взлетает чего-то...
Миниатюры
std::string::find и кириллица  
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
25.08.2013, 22:18  [ТС]     std::string::find и кириллица #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Среда? ОС?
Debian Linux 7.1
Bash
1
2
3
4
5
bernhardt@NP355V4C:~$ gcc --version
gcc (Debian 4.8.1-9) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 22:24     std::string::find и кириллица #13
С Linux не знаком. Там свои особенности. Может в среде нужно что-то настроить.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 22:24     std::string::find и кириллица #14
Цитата Сообщение от [WRG] Посмотреть сообщение
попробуйте с другим словом, может совпало?
у меня не взлетает чего-то...
Мой код пробовал?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 22:27     std::string::find и кириллица
Еще ссылки по теме:

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
25.08.2013, 22:27  [ТС]     std::string::find и кириллица #15
Цитата Сообщение от Nekto Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
  {
  setlocale(LC_ALL,"");
  std::wstring string(L"привет");
  std::wstring search_string(L"ве");
  std::wcout<<"Position of "<<search_string<<" in "<<string<<" : "<<string.find(search_string)<<std::endl;
  system("pause");
  return 0;
  }
благодарю, вот это взлетело, без
C++
1
system("pause");
, конечно. в чем тут соль? что за буквы "L", в коде, без них не работает? ну и какие еще могут быть подводные камни при работе c wstring кроме wcout, если писать приходится в основном в файл, а не на экран?
Yandex
Объявления
25.08.2013, 22:27     std::string::find и кириллица
Ответ Создать тему
Опции темы

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