Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск рус. слова в переменной типу STRING, поиск слово рус. стринг string 
:(
    Опции темы
boostcoder
Дата 23.4.2012, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  23.4.2012,  09:11 Найти цитируемый пост)
УЖОС

что ужасного?

Цитата(Randajad @  23.4.2012,  09:49 Найти цитируемый пост)
С каких пор UTF-8 появился в std::string?

с этих?: http://liveworkspace.org/code/cc314ec8c914...fc9c94e5d2b157d
PM WWW   Вверх
Randajad
Дата 23.4.2012, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Это ваша LWS сохраняет исходник в UTF-8. smile
GCC 4.8 + исходник в ASCII дают результат у меня 11.

А std::string - это просто контейнер char'ов, он не знает что в них.

Это сообщение отредактировал(а) Randajad - 23.4.2012, 11:54
PM MAIL   Вверх
boostcoder
Дата 23.4.2012, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Randajad @  23.4.2012,  11:54 Найти цитируемый пост)
Это ваша LWS сохраняет исходник в UTF-8

не знал, что исходники сохраняют в других кодировках smile 

PM WWW   Вверх
volatile
Дата 23.4.2012, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Компилятор просто не знает что у него исходники в UTF8  
либо вообще не понимает национальные символы.

В студии:
Код

   std::string s = "Привет";
   std::cout << s.size ();

Выход: 6

Исходник в UTF8 !!!

(впрочем не зависит от кодировки исходника.)
Имхо, так и должно быть.

А работать с UTF8 в std::string, как с обычным чар - хождение по краю пропасти.

PM MAIL   Вверх
boostcoder
Дата 23.4.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(volatile @  23.4.2012,  13:29 Найти цитируемый пост)
Выход: 6

это наверное MSVC specific?

Цитата(volatile @  23.4.2012,  13:29 Найти цитируемый пост)
так и должно быть.

где? почему?

Цитата(volatile @  23.4.2012,  13:29 Найти цитируемый пост)
UTF8 в std::string, как с обычным чар - хождение по краю пропасти.

отчего?

PM WWW   Вверх
volatile
Дата 23.4.2012, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(boostcoder @  23.4.2012,  13:34 Найти цитируемый пост)
где? почему?

Потому-что компилятор рабоатет так, как будто нац. символов вообще не существует.
А поскольку едиственное отличие UTF8 от ASCII и заключено в нац.символах, то это тоже самое что он не понимает UTF8
Компилятор 1969 года, например, работал бы точно также.
Впрочем если в gcc это нормально, то что либо доказать линуксоидам - дело дохлое. (я, по крайней мере, пасс)

Цитата(boostcoder @  23.4.2012,  13:34 Найти цитируемый пост)
UTF8 в std::string, как с обычным чар - хождение по краю пропасти.
отчего?

От того что вся логика стринга расчитана что там будет набор чаров, а не неизвестно что...
ну хотя бы:
Код

   std::string s = "ПРИВЕТ";
   std::reverse (s.begin(), s.end ());
   std::cout << s;

Выход:
ТЕВИРП
Что вобщем-то и должно быть. разве нет?

Что будет при UTF8 - даже не берусь сказать.

PM MAIL   Вверх
boostcoder
Дата 23.4.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



reverse же ничего не знает о строке.
с чего бы он должен корректно работать со строкой?
то, что он корректно работает со строкой состоящей из однобайтовых символов - скорее совпадение, чем задумка.
ибо, этот пример работает корректно, не смотря на то что строка в UTF-8.
Код

#include <iostream>
#include <string>
#include <algorithm>

int main() {
   std::string s = "Hello!";
   std::reverse (s.begin(), s.end ());
   std::cout << s;
}

http://liveworkspace.org/code/24ad13a7aa89...d388bd9e2b10a8d

Это сообщение отредактировал(а) boostcoder - 23.4.2012, 14:46
PM WWW   Вверх
borisbn
Дата 23.4.2012, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



В студии всё отрабатывает даже если сохранить исходник в Utf-8. Она (ну, скорее компилятор) считает русские символы в кавычках обычными однобайтовыми Си-строками. sizeof( "Привет" ) == 7. std::string str = "Привет"; str.size() == 6.
Так что приведённый пример с std::reverse отрабатывает как задумывалось...
Разница на лицо. Гнусавые опять с мелкомягкими идут своими (несовпадающими) путями.

Хотя... Мы тут сравниваем тяжёлое и сладкое. Согласно 0x11-му стандарту (!!!)
Цитата
After translation phase 6, a string literal that does not begin with an encoding-prefix is an ordinary string
literal, and is initialized with the given characters.


Студия же не поддерживает этот стандарт.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 23.4.2012, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  23.4.2012,  15:19 Найти цитируемый пост)
однобайтовыми Си-строками

cp1251 ?

Цитата(borisbn @  23.4.2012,  15:19 Найти цитируемый пост)
Студия же не поддерживает этот стандарт.

отчасти.
но их отказы реализовать то-то и то-то, сделают коды написанные для clang/gcc не переносимыми на их компилятор.

PM WWW   Вверх
baldina
Дата 23.4.2012, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(botasa @  22.4.2012,  17:47 Найти цитируемый пост)
студенту тяжело купить такое

есть совершенно бесплатная VS Express
PM MAIL   Вверх
volatile
Дата 23.4.2012, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(borisbn @ 23.4.2012,  15:19)
Цитата
After translation phase 6, a string literal that does not begin with an encoding-prefix is an ordinary string
literal, and is initialized with the given characters.

Студия же не поддерживает этот стандарт.

Это смотря как трактовать этот стандарт. По мне так, как раз она его поддерживает.
Инициализирует именно данными однобайтовыми символами,  а не юникодом, закомуфлированным под однобайтовую последовательность. (ut8 это тоже юникод)
 smile
Так что кто здесь отказывается поддерживать стандарт, это еще большой вопрос.
Впрочем, для стандартописателей, глубоко пофигу проблемы локализации, они кроме английского ничего никогда не знали.
Мелкомягким же приходится работать с нац. символами. Жизнь заставляет, однако.

Это сообщение отредактировал(а) volatile - 23.4.2012, 23:35
PM MAIL   Вверх
Randajad
Дата 24.4.2012, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



boostcoder, пример работает потомушто англицкие символы и стандартные знаки кодируются в utf-8 одним байтом.

Добавлено через 5 минут и 4 секунды
Кстати, 11-ая студия поддерживает вроде как все из C++0x. Неужели никто не пробовал? smile

Это сообщение отредактировал(а) Randajad - 24.4.2012, 09:02
PM MAIL   Вверх
borisbn
Дата 24.4.2012, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Randajad @  24.4.2012,  08:58 Найти цитируемый пост)
Кстати, 11-ая студия поддерживает вроде как все из C++0x

судя по этому она поддерживает меньше половины. В живую, правда, я её ещё не смотрел


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 24.4.2012, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Кстати, про utf-8. Он действительно хорош только при передаче данных по медленному или дорогому каналу. В ЯП я бы его просто запретил бы. Он там вообще нинужен


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 24.4.2012, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Randajad @  24.4.2012,  08:58 Найти цитируемый пост)
boostcoder, пример работает потомушто англицкие символы и стандартные знаки кодируются в utf-8 одним байтом.

спасибо. а то я не знал.

Цитата(Randajad @  24.4.2012,  08:58 Найти цитируемый пост)
11-ая студия поддерживает вроде как все из C++0x

то что она поддерживает, можно сказать - ничего. даже даже самого необходимого нет.

PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1069 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.