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

Поиск:

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


Новичок



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

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



Как сделать поиск под слова в переменной типу string из рус. текстом

Например если есть такое :

Код C++
    
Код

string text = "hello world";
string word;
cin >> word; // ввожу world
int a = text.find(word);
cout << a << endl;


то переменная будет нести в себе позицию начала этого слова в строке text

Как сделать такое только с рус. текстом ? Например

Код C++

Код

string text = "Привет мир";
string word;
cin >> word; // ввожу мир
int a = text.find(word);
cout << a << endl;


то в теории переменная а будет нести в себе позицию начала нужного мне слова, но а мне возвращает -1, и когда я ввожу рус. слова в переменную word и вывожу на екран оно мне кракозябры выводит. 
как сделать что б при вводе слова в переменную типа STRING оно нормально вводилось и выводилось это надо для поиск вводимого мной слова в тексте
PM MAIL   Вверх
boostcoder
Дата 22.4.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Код

#include <iostream>
#include <string>

int main() {
   std::string text = "Привет мир";
   std::string word = "мир";
//   std::cin >> word; // ввожу мир
   int a = text.find(word);
   std::cout << a << std::endl;
}


http://liveworkspace.org/code/b9b8befdc0c4...4fc06063a88aab1

вывод:
Код

13

все правильно.

13 - потому что слово "Привет" состоит из UTF-8 символов, а каждый из них имеет размер 2 байта. и плюс пробел. того 13.

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


Новичок



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

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



а если я ввожу с клавиатуры слово МИР оно кракозябры показивает и не делает сравнение .. как мне это поправить ???
PM MAIL   Вверх
boostcoder
Дата 22.4.2012, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



это зависит от используемой ОС и компилятора.

PM WWW   Вверх
botasa
Дата 22.4.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Win 7 чистый СП1  Укр/Рус/Анг
комп - MS Visual Studio Ultimate original from MSDN
PM MAIL   Вверх
boostcoder
Дата 22.4.2012, 16:50 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



я полагаю лицензии на эти продукты ты можешь предъявить?

смотри тут: http://forum.vingrad.ru/forum/topic-269794...y2086699/0.html
третий пост.

PM WWW   Вверх
botasa
Дата 22.4.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а вы что представник Microsoft или из милиции ? че за странной вопрос ... 
PM MAIL   Вверх
boostcoder
Дата 22.4.2012, 17:17 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(botasa @  22.4.2012,  17:02 Найти цитируемый пост)
представник 

>представитель

нет.
просто любопытно, почему люди крадущие чужие продукты, предпочитают красть, вместо того чтоб купить не нарушая законов.

это воскресный оффтоп smile 
PM WWW   Вверх
botasa
Дата 22.4.2012, 17:47 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну и я себе оффтоп позволю 1 раз =))

не крадут а скачивают, это как робин гуд один украл в богатых и раздает, тем кому раздают я не считаю ворами =))) , не знаю сколько вам лет и сколько вы зарабатываете, но студенту тяжело купить такое =) да без вопросов есть и без. ресурсы, программы, но так как мы живем в Украине / России зачем себе отказывать в удовольствие ? А вы случайно не слышали про такие ресурсы как ex.ua / rutracker и другие ?) там можно сказать сокровище  100-летнего накопления по сравнению с моей ОС и компилятором =)

я конечно не за и не против, я так по середине, но вы зайдите к примеру на ютуб или в гугле вбейте видео про то как закрывали ex.ua ресурс полный халявы, и вы увидите там людей больше собралось чем на выборы президента =)

Это сообщение отредактировал(а) botasa - 22.4.2012, 17:51
PM MAIL   Вверх
boostcoder
Дата 22.4.2012, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



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

ага, знаю я такую девушку: "жила-была девушка робин гуд. у богатых брала, бедным давала." © кто-то там...

Добавлено через 1 минуту и 20 секунд
Цитата(botasa @  22.4.2012,  17:47 Найти цитируемый пост)
там людей больше собралось чем на выборы президента

ну и правильно. президентов выбирает не народ.

PM WWW   Вверх
Леопольд
Дата 22.4.2012, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(botasa @  22.4.2012,  15:30 Найти цитируемый пост)
Win 7 чистый СП1  Укр/Рус/Анг
комп - MS Visual Studio Ultimate original from MSDN


Стоит второй системой линух поставить (и совесть чиста..). G++ лучше подходит для студента (поведение ближе к стандарту). Советую убунту, там много чего свежего из коробки. Тот же буст... Особенно приятно что не надо мучиться с либами, установил из репов, в проекте прописал и вуаля. Для плюсов предпочитаю IDE Code::Blocks. Эклипс весьма неплох, но нужен мощный агрегат для него. IMHO, программер должен быть на ты с обеими операционками.


Кстати, существует бесплатная версия студии. А всякие кряки - не секьюрно это, можно и пострадать...

Это сообщение отредактировал(а) Леопольд - 22.4.2012, 22:51


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Twelves
Дата 23.4.2012, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Для студентов есть DreamSpark. Профессиональная VS бесплатно
PM MAIL   Вверх
borisbn
Дата 23.4.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(boostcoder @  22.4.2012,  13:37 Найти цитируемый пост)
13 - потому что слово "Привет" состоит из UTF-8 символов, а каждый из них имеет размер 2 байта. и плюс пробел. того 13.

УЖОС  smile

Добавлено через 5 минут и 52 секунды
т.к. a != std::string::npos, то я наивно надеялся, что имею право вытащить символ
Код
text.at( a );

ан нет...


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


Опытный
**


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

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



С каких пор UTF-8 появился в std::string? Это обычный ASCII.
А std::wstring - unicode. Там два байта на символ.
PM MAIL   Вверх
borisbn
Дата 23.4.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Randajad, сам в шоке... см. ссылку на LWS в первом же сообщении boostcoder


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


pattern`щик
****


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

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



Цитата(volatile @  23.4.2012,  23:30 Найти цитируемый пост)
Инициализирует именно данными однобайтовыми символами,  а не юникодом, закомуфлированным под однобайтовую последовательность. (ut8 это тоже юникод)

странно. а для чего тогда в стандарт ввели расширенные символы? как их предлагаешь использовать без строки?
PM WWW   Вверх
volatile
Дата 25.4.2012, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(boostcoder @  24.4.2012,  10:30 Найти цитируемый пост)
а для чего тогда в стандарт ввели расширенные символы? как их предлагаешь использовать без строки? 

Юникод, имеющий одинаковый размер для любых символов, это и нужно использовать.

boostcoder, я скажу свое имхо.
В string или в char* нелья использовать UTF8, (Ну только если считать, записать и все). Любое мало-мальски активное использование ведет к нехорошим вещам.
Потому-что риск получить в итоге глючную, невменяемую программу - очень высок.
Гораздо выше, например чем при использвании printf. Но про принтф, все обязательно любят повозмущаться, что де это нарушение безопастности типов, и т.д, и т.п. В принципе я согласен, но в реале, я никогда не встречал проблем с printf'ом.
А вот с UTF8, я встречал и встречаю очень часто. Скажу даже больше, буквально в любой программе, которая активно использует UTF8 с нац. символами - будет ошибка! ну в 99,5%, может быть.  smile 

Почему-же так люди возмущаются на printf, и спокойно используют UTF8?
Потому-что дядя Страус, так сказал... Но про UTF8, он как-то не обмолвился...
Знал бы он что с этим программеры делают... думаю ужаснулся бы старик..

Предлагаю всем такую задачку, не будем брать сложное. Возьмем самое элементарное, для начинающих:
Написать функцию возвращающую истину, если в строке есть русская 'А', и ложь, если ее там нет.
На вход подается UTF8 строка содержащая произвольные расширенные (в т.ч. может быть и латинские) символы.
Код

// Версия для нормальной кодировки
bool russsianA (const std::string & str)
{
   return (str.find('А') != std::string::npos);
}

Я не знаю как без привлечения "высшей математики", написать такую функцию.
Чтоб не скучно было, (++rep)  любому, кто напишет правильную функцию, используя стандартые средства   smile 


Это сообщение отредактировал(а) volatile - 25.4.2012, 00:59
PM MAIL   Вверх
borisbn
Дата 25.4.2012, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(volatile @  25.4.2012,  00:29 Найти цитируемый пост)
Написать функцию возвращающую истину, если в строке есть русская 'А', и ложь, если ее там нет.

Ваша функция матюкается (куча warning'ов), но работает
http://liveworkspace.org/code/ba64c628d664...dce4f854bc80ebe
и даже так
http://liveworkspace.org/code/8c3d9e5dbf29...b70acb5eed65b72

так что volatile.rep++;  smile 


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


pattern`щик
****


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

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



вот исправленные версии варианта borisbn.
http://liveworkspace.org/code/6455efa5ee33...227d30e08dbe48a
http://liveworkspace.org/code/1e9d68b3a883...837e658c28a0a8c


Цитата(volatile @  25.4.2012,  00:29 Найти цитируемый пост)
В string или в char* нелья использовать UTF8, (Ну только если считать, записать и все). Любое мало-мальски активное использование ведет к нехорошим вещам.
Потому-что риск получить в итоге глючную, невменяемую программу - очень высок.

страшные вещи ты говоришь.
никогда не использовал другого юникода кроме UTF8. и с UTF8 никаких проблем не замечал.
PM WWW   Вверх
borisbn
Дата 25.4.2012, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(boostcoder @  25.4.2012,  08:08 Найти цитируемый пост)
вот исправленные версии варианта borisbn.

гыыы. а чего ж результаты отличаются ?

Цитата(boostcoder @  25.4.2012,  08:08 Найти цитируемый пост)
 и с UTF8 никаких проблем не замечал. 

м.б. потому, что с русскими буквами не работал ? Только с английскими ?

Это сообщение отредактировал(а) borisbn - 25.4.2012, 09:01


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


pattern`щик
****


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

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



Цитата(borisbn @  25.4.2012,  09:00 Найти цитируемый пост)
а чего ж результаты отличаются ?

потому что в строке 'Тут русская ' - 22 байта.
буква 'A' - 23


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


Эксперт
****


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

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



Цитата(borisbn @  25.4.2012,  09:00 Найти цитируемый пост)
а чего ж результаты отличаются ?

я про это
Код

int where_russsianA_str (const std::string & str) {
   return str.find("А");
}
int where_russsianA_char (const std::string & str) {
   return str.find('А');
}

int main()
{
   std::string rus = "Тут русская А присутствует";
   std::cout << where_russsianA_str( rus ) << std::endl;
   std::cout << where_russsianA_char( rus ) << std::endl;
}

Вывод
Цитата
22
23

http://liveworkspace.org/code/2bb3580795d1...83e17a424a71632


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


pattern`щик
****


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

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



русская 'А' состоит из двух байт.
поэтому where_russsianA_char() не должна корректно работать.

Добавлено через 58 секунд
я использую эту хидер-онли, STL совместимую, микро-либу.
PM WWW   Вверх
mes
Дата 25.4.2012, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(borisbn @  24.4.2012,  08:25 Найти цитируемый пост)
Он действительно хорош только при передаче данных по медленному или дорогому каналу. В ЯП я бы его просто запретил бы. Он там вообще нинужен 

однако ж ) 

Цитата(volatile @  24.4.2012,  23:29 Найти цитируемый пост)
Юникод, имеющий одинаковый размер для любых символов, это и нужно использовать.

Вы смешиваете понятие "строка" с понятием "контейнер для строки".. smile Это не "специальный" юникод имеет одинаковую ширину символа, а юникод помещает в такой контейнер, ячейка которого способна вместить любой символ юникода.. Ну а выбор контейнера зависит от задачи.. 
Если нужно оперировать посимвольно, то конечно лучше широкосимвольная строка, но есть ряд задач когда односимвольная строка будет подходящим контейнером.. 

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

если знаешь с чем работаешь - никакой пропасти smile

Добавлено через 5 минут и 12 секунд
P.S. о том, в какой кодировке хранить исходники, отдельный вопрос ..  В любой случае при использовании нац символов это ложится на плечи программиста и должно согласовываться отдельным соглашением.. 



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


Эксперт
****


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

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



Спасибо друзья! Спасибо что лишний раз наглядно показали, что использовать utf8 - крайне опасно.
Увы, ни одна из ваших функций не правильна.

Рассмотрю только последнюю, "исправленную" версию от boostcoder
(варианты от borisbn, как минимум страдают тем же самым)

Итак
Цитата

bool russsianA (const std::string & str)
{
   return (str.find("А") != std::string::npos);
}

Программа ищет подстроку "А" в заданной строке. Вроде бы все ок, не так ли?
Но давайте внимательно посмотрим, что происходит.
hex представление буквы А в utf8 :
Код
D0 90


Теперь рассмотрим строку в которой происходит поиск. Допустим она состоит из двух букв "XY"
Пусть на месте буквы Х находится любой символ с кодировкой: 
Код
?? D0
 (Вместо ?? подставьте любой код в диапазоне 80-FF)

а на месте буквы Y находится любой символ с кодировкой:
Код
90 ??


Соответственно, вся строка "XY", выглядит так:
Код
?? D0 90 ??

Таких сочетаний, как вы понимаете 128*128= 16384 штук

Отправляем одну из таких строк "XY" на поиск в ней русской 'А', и о чудо!, в троке "XY" оказывается присутствует 'A'!

Тут можно возразить что строки "XY" никогда не встретятся.
А вы точно сможете дать гарантию, что ни один из 16384 вариантов, никогда не встретится ?
Это одни из тех багов, которые сидят в программах вечно, и когда-нибудь, по законам Мерфи в момент когда смогут нанести максимальный ущерб, они сработают.
И вся беда в том, что такая ошибка не ловится. Она просто не воспроизводится у программиста.
И он матерится на "долбанных юзеров", у которых баги, неизвестно откуда..

Напомю, здесь мы рассмотрели только самый невинный вариант - Поиск символа в константной строке.
Варианты с форматированием винчестера, на отрицательный ответ юзера, оставляю на вашу фантазию...

Цитата(mes @  25.4.2012,  10:14 Найти цитируемый пост)
если знаешь с чем работаешь - никакой пропасти 

Аболютно универсальный ответ, на любое сомнитльное решение.  smile 


Это сообщение отредактировал(а) volatile - 26.4.2012, 00:30
PM MAIL   Вверх
boostcoder
Дата 26.4.2012, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



слишком много букаф %)
воспроизведи то о чем говоришь, в примере.
PM WWW   Вверх
volatile
Дата 26.4.2012, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(boostcoder @  26.4.2012,  01:06 Найти цитируемый пост)
слишком много букаф %)
воспроизведи то о чем говоришь, в примере. 

Цитата(volatile @  26.4.2012,  00:23 Найти цитируемый пост)
И вся беда в том, что такая ошибка не ловится. Она просто не воспроизводится у программиста.


boostcoder, В принципе хоть букв и много, смысл там простой. Может найтись случайное сочетание, которое даст ложное срабатывание.

PM MAIL   Вверх
volatile
Дата 26.4.2012, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ладно, ребята. убеждать не буду, больше.
Используйте utf8
В принципе mes, провильно сказал.
Цитата(mes @  25.4.2012,  10:14 Найти цитируемый пост)
если знаешь с чем работаешь - никакой пропасти


Просто я много раз видел, когда например под отведенные три символа английских, поверх писали 3 символа русских.
Щас просто, не приходят в голову все варианты багов которые я видел.
Дай бог чтоб у вас такого никогда не было.

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


pattern`щик
****


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

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



остается гадать...
PM WWW   Вверх
borisbn
Дата 26.4.2012, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



volatile, только не подумайте, что я защищаю utf-8 в программах. Я как раз противник этой недокодировки (кроме передачи данных) и нигде в исходниках её не использую.
Однако, Вы неправы насчёт того, что комбинация, похожая на 'А' может появиться из двух половинок двух символов. Дело в том, что любая русская буква состоит из двух таких байт
Цитата
110xxxxx 10xxxxxx

и ситуации
Цитата(volatile @  26.4.2012,  00:23 Найти цитируемый пост)
Соответственно, вся строка "XY", выглядит так:

?? D0 90 ??

быть не может в принципе.

источник


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


hell is here
**


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

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



borisbn, зато ничто не мешает найти русскую букву внутри трех-байтного или четырехбайтного символа
подал иероглиф на вход - нашел в нем русскую а - нонсенс
PM MAIL   Вверх
borisbn
Дата 26.4.2012, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



alexvs11, нет. Вот таблица из той статьи, на которую я ссылался
user posted image
см. внимательно... не может быть


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


hell is here
**


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

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



borisbn, да действительно, вроде как нельзя
PM MAIL   Вверх
boostcoder
Дата 26.4.2012, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



потому я и попросил volatile воспроизвести ошибку, ибо знаю, что того что он описал, не может быть.
но ему, вместо нескольких строк кода, оказалось проще написать 29 строк букаф.

а над этим уже стОит задуматься...
PM WWW   Вверх
mes
Дата 26.4.2012, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(alexvs11 @  26.4.2012,  07:43 Найти цитируемый пост)
да действительно, вроде как нельзя 

более того, utf8 обладает еще одним чудесным свойством.. если пропадет один любой байт, пропадет/испортится только один символ, все остальное останется в порядке smile



--------------------
PM MAIL WWW   Вверх
borisbn
Дата 26.4.2012, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mes @  26.4.2012,  10:17 Найти цитируемый пост)
если пропадет один любой байт, пропадет/испортится только один символ

прекрасное свойство для передачи данных без подтверждения по плохому каналу.
Писать же исходники на utf-8 или работать с такими строками при помощи std::string - IMHO неразумно


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


любитель
****


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

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



Цитата(borisbn @  26.4.2012,  09:20 Найти цитируемый пост)
Писать же исходники на utf-8 

а если utf8 родная кодировка оси ? что нужно специально устанавливать какую то другую ? 
тем более если в пределах одной программы используются несколько нац языков, и требуется лишь хранение и вывод таких строк, при этом память желательно не растрачивать ?




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


pattern`щик
****


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

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



Цитата(borisbn @  26.4.2012,  10:20 Найти цитируемый пост)
Писать же исходники на utf-8 или работать с такими строками при помощи std::string - IMHO неразумно

страшно жить! smile

Добавлено через 4 минуты и 1 секунду
Цитата(mes @  26.4.2012,  10:31 Найти цитируемый пост)
а если utf8 родная кодировка оси ?

дело даже не в том, родная или нет. дело в том, что UTF-8 - стандарт, который поддерживают абсолютно все *nix ОСи.

borisbn, так вот ответь: что для меня будет важнее, подстраивание под одну ОС, в которой я даже не работаю, или подстраивание под все остальные? при том, что я без каких либо сложностей с кодировкой, любые свои коды соберу и для вендус? ;)
PM WWW   Вверх
mes
Дата 26.4.2012, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  26.4.2012,  09:33 Найти цитируемый пост)
страшно жить! 

ага, програмисты любят страшилки =)



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


Эксперт
****


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

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



Цитата(mes @  26.4.2012,  10:31 Найти цитируемый пост)
а если utf8 родная кодировка оси ?

сочувствую
Цитата(boostcoder @  26.4.2012,  10:33 Найти цитируемый пост)
дело в том, что UTF-8 - стандарт, который поддерживают абсолютно все *nix ОСи.

то же
Цитата(boostcoder @  26.4.2012,  10:33 Найти цитируемый пост)
так вот ответь: что для меня будет важнее, подстраивание под одну ОС, в которой я даже не работаю, или подстраивание под все остальные?

Что важнее для тебя - не знаю. Для меня важно какая ОС установлена на компьютере пользователя моего софта, а не на моём. К счастью, для меня эти две ОСи совпадают, а что творится на остальных 4-х %-тах ОСей - не очень интересно.

mesboostcoder, вы - профессионалы, и давать вам какие-то советы - дело неблагодарное. Я же (и как я понял volatile) хочу предостеречь от ошибок новичков, а при работе с utf-8 без большого опыта и понимания этой кодировки они (ошибки) практически неизбежны.


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


pattern`щик
****


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

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



Цитата(borisbn @  26.4.2012,  13:04 Найти цитируемый пост)
сочувствую

ох и толсто smile 

Цитата(borisbn @  26.4.2012,  13:04 Найти цитируемый пост)
важно какая ОС установлена на компьютере пользователя моего софта

разумеется *nix.

Цитата(borisbn @  26.4.2012,  13:04 Найти цитируемый пост)
хочу предостеречь от ошибок новичков

хз о каких ошибках ты говоришь(об ошибках в понимании?), но при использовании этого, вся STL поддерживает utf-8.

Добавлено через 8 минут и 14 секунд
к тому же, как я неоднократно писал, я считаю неразумным писать одноразовый код.

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


любитель
****


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

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



Цитата(borisbn @  26.4.2012,  12:04 Найти цитируемый пост)
 Для меня важно какая ОС установлена на компьютере пользователя моего софта, а не на моём. К счастью, для меня эти две ОСи совпадают, 

вот это действительно кошмар.. то есть чтоб переделать под другую кодировку, надо фактически переделать всю программу ? и да, если вдруг пишете вместе с французом кто чью кодировку должен принять ?

Добавлено через 53 секунды
Цитата(borisbn @  26.4.2012,  12:04 Найти цитируемый пост)
mes,.. вы - профессионалы,

я пока любитель smile

Добавлено через 2 минуты и 37 секунд
Цитата(borisbn @  26.4.2012,  12:04 Найти цитируемый пост)
Я же (и как я понял volatile) хочу предостеречь от ошибок новичков, 

внушить страхи перед кодировками и оставить их у разбитого корыта когда им придется работать в одной проге больше , чем с одной кодировкой ?!



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


pattern`щик
****


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

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



Цитата(mes @  26.4.2012,  14:05 Найти цитируемый пост)
вот это действительно кошмар.. то есть чтоб переделать под другую кодировку, надо фактически переделать всю программу ? и да, если вдруг пишете вместе с французом кто чью кодировку должен принять ?

такова реальность у borisbn`а %)

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


любитель
****


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

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



Цитата(borisbn @  26.4.2012,  12:04 Найти цитируемый пост)
 а при работе с utf-8 без большого опыта и понимания этой кодировки они (ошибки) практически неизбежны. 

ошибки неизбежны при использовании нац символов независимо от кодировки.. можно конечно поставить жесткие рамки и принудительно выставить исходники и вывод в одну кодировку.. Вполне за такое решение, когда (пусть неявно) подчеркивается нужность подобного подхода.. В охтальных случаях я за правильность расставления акцентов smile



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


Эксперт
****


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

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



Цитата(mes @  26.4.2012,  14:05 Найти цитируемый пост)
 то есть чтоб переделать под другую кодировку, надо фактически переделать всю программу ?

Нет, конечно. У меня для этого есть такой же костыль, как и
Цитата(boostcoder @  26.4.2012,  13:12 Найти цитируемый пост)
 при использовании этого, вся STL поддерживает utf-8.

а именно QString + QTextCodec  smile 

Цитата(mes @  26.4.2012,  14:05 Найти цитируемый пост)
если вдруг пишете вместе с французом кто чью кодировку должен принять ?

IMHO that's obvious, that I wouldn't use Russian, and Frenchman wouldn't use French  smile  

Как вам кажется, логично ли предположить, что такой код
Код
std::string text = "Привет";
cout << text.at( 1 );

должен вывести 'р' ? Только честно. По логике, а не по знанию ада с кодировками и всё, что с ним связано...

Кстати, на LWS этот код вообще ничего не выводит  smile

Добавлено через 5 минут и 30 секунд
Цитата(volatile @  23.4.2012,  14:33 Найти цитируемый пост)
что либо доказать линуксоидам - дело дохлое. (я, по крайней мере, пасс)

Заменить, что-ли, своих женщин/программистов + чары/стринги на это ?


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


любитель
****


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

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



Цитата(borisbn @  26.4.2012,  13:35 Найти цитируемый пост)
 логично ли предположить, что такой код

пойдем дальше :
логично ли предположить 
Код

std::string text = "Привет";
cout << text;

что вывод этого кода будет Привет ? однако ж практика (в том числе и куча вопросов почему у меня кракозябры вместо текста) утверждают обратное smile что уж говорить про отдельный символ smile

Добавлено @ 14:51
Цитата(borisbn @  26.4.2012,  13:35 Найти цитируемый пост)
а именно QString 

если говорить по логику , то для меня строчка,  по вывода введенного пользователем текста :
Код

m_QLabel->setText( m_QLineEdit->getText() );

хоть и логична, но внушает (справедливые) опасения  smile какие именно умолчу, чтоб дать возможность понять направление моих мыслей
так что на чистой логике  в программированнии далеко не уедишь smile


Это сообщение отредактировал(а) mes - 26.4.2012, 14:54


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


Эксперт
****


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

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



Цитата(mes @  26.4.2012,  14:44 Найти цитируемый пост)
 внушает (справедливые) опасения

html ? ну... именно в QLabel он не страшен. XSS там не пройдёт)))


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


любитель
****


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

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



Цитата(borisbn @  26.4.2012,  15:02 Найти цитируемый пост)
именно в QLabel он не страшен.

страшен ли - это другой вопрос ) но поведение может быть не очень ожидаемое..так же как и str.at(1) smile


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


Эксперт
****


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

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



Цитата(borisbn @  26.4.2012,  08:17 Найти цитируемый пост)
Вы неправы насчёт того, что комбинация, похожая на 'А' может появиться из двух половинок двух символов


borisbn,  признаюсь, я привел не удачный пример. Хотел максимально простой и наглядный. Придумал, так на лету, но .. ступил 
признаюсь!  smile 
При правильной строке действительно невозможно такое состояние.

Но тем не менее, смысл не в этом примере.  Кодировка utf8, э... как бы это сказать... глюкабельная.
т.е. предрасполагающая к багам. Очень часто видел в программах, ошибки приводящие к нестабильности.
Не хочу щас копаться выискивать какие-то примеры.
Достаточно того, что в слове "привет", все-ж таки 6 букв, а не 12  smile

Цитата(volatile @  26.4.2012,  02:09 Найти цитируемый пост)
Ладно, ребята. убеждать не буду, больше.

Тем более, что похоже это начинает затрагивать чьи-то религиозныее чувства.
А там где начинается фанатизм, кончается логика.



Это сообщение отредактировал(а) volatile - 26.4.2012, 23:44
PM MAIL   Вверх
baldina
Дата 27.4.2012, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(volatile @  26.4.2012,  23:34 Найти цитируемый пост)
 Кодировка utf8, э... как бы это сказать... глюкабельная.
т.е. предрасполагающая к багам

мнение понятно, но не обоснованно

Цитата(volatile @  26.4.2012,  23:34 Найти цитируемый пост)
Очень часто видел в программах, ошибки приводящие к нестабильности.

я тоже. только причем тут utf? ошибки в программах вообще склонны приводить к нестабильности
Цитата

- что в мире творится?
- стабильности нет...


c utf неудобно работать при помощи char (std::string), да, но - не опасно.
к тому же есть библиотеки, utfcpp например
так что религия тут непричем)
PM MAIL   Вверх
boostcoder
Дата 27.4.2012, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(volatile @  26.4.2012,  23:34 Найти цитируемый пост)
затрагивать чьи-то религиозныее чувства

т.е. тот факт, что utf8 самая удобная кодировка(имхо) - религиозные чувства?


Это сообщение отредактировал(а) boostcoder - 27.4.2012, 00:32
PM WWW   Вверх
volatile
Дата 27.4.2012, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  27.4.2012,  00:08 Найти цитируемый пост)
c utf неудобно работать

Цитата(boostcoder @  27.4.2012,  00:31 Найти цитируемый пост)
utf8 самая удобная кодировка


Надо голосование устроить. smile 

PM MAIL   Вверх
volatile
Дата 27.4.2012, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Блин.., из-за того что вчера тупанул, даже спал плохо..
Ночью снились utf символы, и другие кошмары  smile  

Стоит только добавить, что мое замечание, 
Цитата(volatile @  26.4.2012,  23:34 Найти цитируемый пост)
При правильной строке действительно невозможно 

означает лишь что над строкой не выполнялись, например, никакие стандартные алгоритмы.

Иначе на вопрос
Цитата(boostcoder @  26.4.2012,  01:06 Найти цитируемый пост)
слишком много букаф %)
воспроизведи то о чем говоришь, в примере. 

можно привести реальный пример:
Код

int main ()
{
   std::string str = "ѐЁ";               // Исходная строка, весьма далекая от намёка на букву 'А'
   std::sort (str.begin(), str.end (), std::greater<char>()); // сортировка строки, невинная операция, при нормальной кодировке
   std::cout << russsianA (str);     // В строке  появилась русская 'A'

}

http://codepad.org/aQMdC3ag

boostcoder, lws почему-то у меня щас не открылась


Это сообщение отредактировал(а) volatile - 27.4.2012, 06:58
PM MAIL   Вверх
boostcoder
Дата 27.4.2012, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(volatile @  27.4.2012,  06:48 Найти цитируемый пост)
реальный пример

ну... я не верю, что можно случайно отсортировать utf`ную строку))

к тому же(специально по этому случаю, добавил на LWS utfcpp):
Код

#include <iostream>
#include <string>
#include <algorithm>
#include <utf8.h>

int main () {
   std::string str = "ѐЁ";               // Исходная строка, весьма далекая от намёка на букву 'А'
   std::cout << std::boolalpha << utf8::is_valid(str.begin(), str.end()) << std::endl;
   std::sort (str.begin(), str.end (), std::greater<char>()); // сортировка строки, вобщем-то невинная операция, при нормальной кодировке
   std::cout << std::boolalpha << utf8::is_valid(str.begin(), str.end()) << std::endl;
   //std::cout << russsianA (str); // это что за функция? оО
}

http://liveworkspace.org/code/492f72f74fa9...5201b674ba97c4d


Цитата(volatile @  27.4.2012,  06:48 Найти цитируемый пост)
lws почему-то у меня щас не открылась

да, сервер вчера обновлял.


Добавлено через 1 минуту и 52 секунды
дока, если вдруг кто захочет поэкспериментировать.
PM WWW   Вверх
volatile
Дата 27.4.2012, 10:59 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(boostcoder @  27.4.2012,  07:11 Найти цитируемый пост)
я не верю, что можно случайно отсортировать 

Не только отсортировать. Практически любой стандартный алгоритм может привести к краху.
Да не только алгоритм, обыный доступ к символу  str[n] = 'А', это самоубийство;
Нужно постоянно помнить об этом.

Цитата(boostcoder @  27.4.2012,  00:31 Найти цитируемый пост)
тот факт, что utf8 самая удобная кодировка(имхо) - религиозные чувства?

Не верю просто что это можно назвать самой удобной кодировкой, иначе как не под религиозным порывом.  smile

Не думал что это выльется в холивар. (В конечно счете, как я понимаю win vs nix).
Боже упаси, не хочу в этом участвовать.  smile 

Между прочим уважаю линуксоидов. В никсах действительно очень и очень много что гораздо лучше, сделано чем в венде.
И венда по общему (суммарному) безусловно проигрывает. Но есть вещи, которые в венде лучше, их не много, но они есть.

Между прочим, недавно дженту поставил в качестве альтернативки.
Неплохоая штуковина, п...хаться правда пришлось, но щас вроде все ок.  smile 


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


pattern`щик
****


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

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



Цитата(volatile @  27.4.2012,  10:59 Найти цитируемый пост)
Не только отсортировать. Практически любой стандартный алгоритм может привести к краху.
Да не только алгоритм, обыный доступ к символу  str[n] = 'А', это самоубийство;
Нужно постоянно помнить об этом.

просто нужно приучать себя к пониманию того, что строка - не контейнер чаров, а контейнер некоторых единиц интерпретируемых как символы.
и все. никаких косых действий в этом случае не случится.
PM WWW   Вверх
volatile
Дата 27.4.2012, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(boostcoder @  27.4.2012,  11:03 Найти цитируемый пост)
просто нужно приучать себя к пониманию того,

В том то все и дело, что об этом почти  никто не вспоминает.
Зачем далеко ходить, даже на этом форуме, почти любая программа которую пишут для новичков, (и не только для новичков), грешит этим.
Вспоминаю такие темы как "определить что это полиндром",  "найти максимальное по длине слово в предложении", и так далее...,  здесь таких тем очень много.
Любая из этих программ при вводе русских символов отправит комп в "нирвану", (или в самом лучшем случае просто даст не верный результат).
А кто запретит ввести русские символы?

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


Эксперт
****


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

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



Цитата(boostcoder @  27.4.2012,  07:11 Найти цитируемый пост)
я не верю, что можно случайно отсортировать utf`ную строку

Вы счастливый человек, boostcoder. Я вот не верю, что это можно сделать нарочно  smile 

volatile, удобно использовать (в быту), неудобно программировать (на С++), только и всего
PM MAIL   Вверх
borisbn
Дата 27.4.2012, 13:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я бы так сформулировал: строку в utf-8 в std::string можно ТОЛЬКО хранить. Никаких операций с ней делать нельзя. Взять хотя бы reverse_iterator... Кстати... с rbegin() и эта библиотечка не спасёт:
Цитата
utf8::is_valid( str.rbegin(), str.rend() )


С utf-8 в Си++ становится как в интернетах - всё, что вводит пользователь - обязательно "анэскейпить". В нашем случае - переводить либо в свою однобайтовую кодировку, либо в utf-16, а уж затем работать с такой строкой...



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


pattern`щик
****


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

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



ну не знаю... помоему вы все слишком драматизируете..

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


любитель
****


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

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



Цитата(volatile @  27.4.2012,  11:44 Найти цитируемый пост)
В том то все и дело, что об этом почти  никто не вспоминает.

аргумент  smile 


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


Эксперт
****


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

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



драма тут непричем. это вообще не пьеса. скорее, очерк)))
я честно пытался припомнить, приходилось ли мне когда-нибудь сортировать строку. или моим знакомым. или хотя бы задачу решенную иным способом, но где такое имело бы место быть. не припомнил.
PM MAIL   Вверх
mes
Дата 27.4.2012, 13:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(borisbn @  27.4.2012,  12:08 Найти цитируемый пост)
Я бы так сформулировал: строку в utf-8 в

более жестко: со строкой кроме хранения и передачи ничего нельзя делать, пока не знаешь откуда она пришла и что из себя представляет..

Добавлено через 2 минуты и 10 секунд
Цитата(baldina @  27.4.2012,  12:16 Найти цитируемый пост)
 приходилось ли мне когда-нибудь сортировать строку. или моим знакомым. или хотя бы задачу решенную иным способом

ну так volatilе уже вспоминал студенческие задания, и сетовал на отсутсвие в них "проверки на дурака" от не той кодировки.. 



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


Эксперт
****


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

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



а, про драму это не про сортировку, а про хранение/обработку. посыпаю голову.
...
вобщем-то нет иной потребности использовать какую-либо конкретную кодировку, кроме задач ввода/вывода.
конечно удобнее всего вообще об этом не думать, но не получается. просто потому, что кодировок более одной.

Добавлено через 2 минуты и 18 секунд
мне инструктор говорил: не смотри на приборы. только на дорогу.
есть две правды, для обучающихся и умеющих. острые предметы детям не дают.

Добавлено через 4 минуты и 29 секунд
Цитата(mes @  27.4.2012,  13:16 Найти цитируемый пост)
студенческие задания

ну если только... и то - не умно

PM MAIL   Вверх
volatile
Дата 28.4.2012, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  27.4.2012,  13:16 Найти цитируемый пост)
честно пытался припомнить, приходилось ли мне когда-нибудь сортировать строку

А проходить строку итератором, к примеру, вам тоже не приходилось?

Цитата(mes @  27.4.2012,  13:16 Найти цитируемый пост)
сетовал на отсутсвие в них "проверки на дурака" от не той кодировки.. 

Если это кодировка системы по умолчанию, зачем проверка? Строка по умолчанию идет в UTF-8.
Значит любой код и нужно писать с учетом того что это utf8.
Получается, что студенты учатся на одном, а реале нужно оказывается делать совсем другое.

Цитата(baldina @  27.4.2012,  13:24 Найти цитируемый пост)
вобщем-то нет иной потребности использовать какую-либо конкретную кодировку, кроме задач ввода/вывода

Да, причем
Цитата(borisbn @  27.4.2012,  13:08 Найти цитируемый пост)
 всё, что вводит пользователь - обязательно "анэскейпить". В нашем случае - переводить либо в свою однобайтовую кодировку, либо в utf-16,


Это выход.

Это сообщение отредактировал(а) volatile - 28.4.2012, 01:46
PM MAIL   Вверх
volatile
Дата 28.4.2012, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  27.4.2012,  13:16 Найти цитируемый пост)
я честно пытался припомнить, приходилось ли мне когда-нибудь сортировать строку. или моим знакомым. или хотя бы задачу решенную иным способом, но где такое имело бы место быть. не припомнил. 

И что? что вообще из этого следует?
Например на обвинения в небезопасности принтфа, теоретически достаточным ли будет аргумент:
мне (и даже моим знакомым), никогда не приходилось передавать число вместо строки, или наоборот?

Вам не приходилось сортировать строку? Хорошо!
Значит вы знаете какими алгоритмами можно пользоваться, а кикими нельзя!
Может вы знает список таких разрешений? этим алгоритмом можно пользоваться, тем нельзя?
Где, в каком месте стандарта это написано?

И кто даст гарантию что даже безобидный (как вам кажется) алгоритм, не натворит бед?
Чтоб это утвержать, нужно изучать внутренний код алгоритма, а это уже никакими стандартами не оговоривается.


Это сообщение отредактировал(а) volatile - 28.4.2012, 04:30
PM MAIL   Вверх
mes
Дата 28.4.2012, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(volatile @  28.4.2012,  00:43 Найти цитируемый пост)
А проходить строку итератором, к примеру, вам тоже не приходилось?

сотни раз и никаких проблем smile в том числе и с сортировкой содержимого строк.. 

Цитата(volatile @  28.4.2012,  00:43 Найти цитируемый пост)
Если это кодировка системы по умолчанию, зачем проверка? Строка по умолчанию идет в UTF-8. Значит любой код и нужно писать с учетом того что это utf8.

код может быть быть запущен на системе, на которой установлена любая кодировка.. и если этот код требует ввода вывода расширенных символов, программа должна предусматривать это .. 

Цитата(volatile @  28.4.2012,  00:43 Найти цитируемый пост)
Получается, что студенты учатся на одном, а реале нужно оказывается делать совсем другое.

Получается, что у студентов должна быть отдельная тема посвещенная работе со строками "в различных условиях".. 

Цитата(volatile @  28.4.2012,  00:43 Найти цитируемый пост)
Да, причем
Цитата

 всё, что вводит пользователь - обязательно "анэскейпить". В нашем случае - переводить либо в свою однобайтовую кодировку, либо в utf-16

Это выход.

Это обязательное правило хорошего тона программирования.. 

Цитата(volatile @  28.4.2012,  03:26 Найти цитируемый пост)
Может вы знает список таких разрешений? этим алгоритмом можно пользоваться, тем нельзя?
Где, в каком месте стандарта это написано?

есть три типа строк : singlechar, widechar и multibyte.. 
если алгоритм работает по-символьно, то применять можно только к первым двум.. 

Цитата(volatile @  28.4.2012,  03:26 Найти цитируемый пост)
И кто даст гарантию что даже безобидный (как вам кажется) алгоритм, не натворит бед?

соблюдать правила хорошего тона.. тогда ни себе, ни другим не создадите проблем.. 

Цитата(volatile @  28.4.2012,  03:26 Найти цитируемый пост)
Чтоб это утвержать, нужно изучать внутренний код алгоритма, а это уже никакими стандартами не оговоривается.

дока и логика - и никаких проблем smile



Это сообщение отредактировал(а) mes - 28.4.2012, 09:54


--------------------
PM MAIL WWW   Вверх
mes
Дата 28.4.2012, 10:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(volatile @  28.4.2012,  03:26 Найти цитируемый пост)
 на обвинения в небезопасности принтфа

мне кажется вы главного пропускаете.. 

printf как раз и есть аналог метода за который вы голосуете -выбрать однобайтовую кодировку и наживать проблемы при адаптации ее под другие.. (я специально вспоминал француза).. 

Другой же подход, позволяет безопасно и не парясь работать с любым языком и даже одновременно с нескольками ценой подключения пары хидеров.. 


--------------------
PM MAIL WWW   Вверх
alexvs11
Дата 28.4.2012, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Цитата(mes @  28.4.2012,  10:08 Найти цитируемый пост)
printf как раз и есть аналог метода за который вы голосуете -выбрать однобайтовую кодировку и наживать проблемы при адаптации ее под другие.. (я специально вспоминал француза).. 

мне кажется он говорил про 4-х байтную -  с которой как раз проблем не должно быть (при использовании w*-функций)
PM MAIL   Вверх
mes
Дата 28.4.2012, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(alexvs11 @  28.4.2012,  10:03 Найти цитируемый пост)
мне кажется он говорил про 4-х байтную -  с которой как раз проблем не должно быть (при использовании w*-функций) 

wchar не всегда 4х байтен smile 

alexvs11,  вы думаете volatile предлагал отказаться от простой string (без w) ? 


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 28.4.2012, 12:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mes @  28.4.2012,  12:25 Найти цитируемый пост)
 вы думаете volatile предлагал отказаться от простой string (без w) ?

Сорри, что влезаю в вашу беседу, но ИМХО volatile предлагал отказаться от работы с Utf-8


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


Эксперт
****


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

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



borisbn, вы лучше всех понимаете меня, спасибо.

alexvs11, Насчет принтфа. Это была просто аналогия, призванная показать непоследовательность отношения к безопасности, не более. Оставим его.

Цитата(mes @  28.4.2012,  09:53 Найти цитируемый пост)
сотни раз и никаких проблем  в том числе и с сортировкой содержимого строк.. 

mes,  Нисколько не сомневаюсь в ваших способностях.
Но здесь речь идет о безопасности, о которой так любят рассуждать С++ теоретики.
А ваш аргумент из разряда "я делал, и все ништяк".

Цитата(mes @  28.4.2012,  09:53 Найти цитируемый пост)
код может быть быть запущен на системе, на которой установлена любая кодировка..

mes, Здесь, собственно, обсуждается вопрос не об абстрактном случае с неизвестной кодировкой, а о вполне конкретном.
Кодировка определена, и эта кодировка - UTF-8!

Что можно делать с utf строкой?
Например:
Можно ли вообще, применять к ней какие -либо стандартные алгоритмы?
Если можно, то какие именно?

Можно ли, применять к ней какие -либо методы std::string?
Все ли методы можно / не все?
Если последнее, какие именно?

Цитата(mes @  28.4.2012,  09:53 Найти цитируемый пост)
есть три типа строк : singlechar, widechar и multibyte.. 
если алгоритм работает по-символьно, то применять можно только к первым двум.. 

Есть где-то ранжировка алгоритмов? (я честно, просто не в курсе, если есть то, не могли бы вы указать где именно?)
Вопрос актуальный, так как сорт, как мы выяснили, нельзя применять к стринг. 
Возникает вопрос, насчет других алгоритмов.
Это же отностися и к методам.
Как напрмер вы о относитесь к применению таких методам, как: rbegin(), rend(), at(), operator[]?


Цитата(mes @  28.4.2012,  09:53 Найти цитируемый пост)
Это обязательное правило хорошего тона программирования.. 

Здесь мы, собственно пришли к консенсусу.
Рад что мы пришли к такому выводу. 

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


Эксперт
****


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

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



volatile, string - массив однобайтных элементов, wstring - массив двухбайтных элементов. utf - последовательность элементов разной длины, которая определена правилами (кодировкой). понятно, что алгоритмы работы с массивом одинаковых элементов не подходят для этого. 
думаю, тривиальный факт, что дело не в алгоритмах (for_each, find, sort и т.д.), а в контейнере (точнее - поведении итератора).
вы уже на трех страницах доказываете, что неправильно использовать string для utf, думая об элементе string::value_type как о символе utf. так с этим никто и не спорит.

но:
- есть задачи, где не требуется рассматривать элементы контейнера по отдельности. например, при выводе в поток
- есть задачи, где это требуется в 1-2 местах, и городить вокруг этого огород просто нецелесообразно. нужно обойтись аккуратно. я не вижу тут проблем и теоретических нарушений. это не хуже чем cast, а против cast в принципе никто не выступает, хотя и признавая что приведений типа должно быть меньше

конечно, можно (и в ряде случаев нужно) написать контейнер, учитывающий правила кодировки utf и работать с ним полноценно (впрочем уже написали, utfcpp).


Это сообщение отредактировал(а) baldina - 28.4.2012, 13:31
PM MAIL   Вверх
mes
Дата 28.4.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(volatile @  28.4.2012,  12:11 Найти цитируемый пост)
Но здесь речь идет о безопасности, о которой так любят рассуждать С++ теоретики.
А ваш аргумент из разряда "я делал, и все ништяк".

рад что Вы это отметили, и я намерено с целью провокации ответил так..  потому что в том ракусе в каком Вы его задали, напрашивается именно такой "неаргументированный" ответ.. Если б Вы перешли на вопрос о сферах применения кодировок, о методах безопасной работы с ними, то и ответ был бы более аргументированым.. хотя основные тезисы, оталкиваясь от которых можно представить полную картину, уже прозвучали и не один раз.. 
Я думаю в теме надо сделать паузу, чтоб дать возможность переварить всевышесказанное smile главное опирайтесь на то, что за утф8 голосовали именно из за удобства , а не из за религиозных чувств.. 
А против, уже имхо, в основном "из за страха" перед нестандартной кодировкой.. а у него как говорится, глаза велики smile



Это сообщение отредактировал(а) mes - 28.4.2012, 13:45


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


Эксперт
****


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

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



Цитата(mes @  28.4.2012,  13:44 Найти цитируемый пост)
Я думаю в теме надо сделать паузу

Ок.

boostcodermesbaldina
Изначально, моей целью было не доказательство чего-то, кому-то, а скорее желание дать добрый совет.
И уж конечно не вам опытным "монстрам" программирования, а скорее новичкам, тем кто будет читать эту тему.
Совет прост:
Не использовать, а если использовать, то быть предельно внимательными, с кодировкой UTF8
Потому-то часто (поверьте очень часто), я видел баги именно из-за этой кодировки.
Вы возможно спросите почему вам не приходилось видеть такие, баги?
Скажу так, мне приходилось заниматься одно время копанием в машинных кодах, без исходников. 
Это не программинг. Именно там я понял насколько опасна эта кодировка.
Не кого не заставляю следовать этому совету! просто добрый совет, поверьте.

Я не хотел скатываться до жестких требований цитат из стандарта. (просто не любитель подобной дискуссии)
сожалею, что пришлось это сделать.

Большое спасибо всем!

borisbn - вам персонально! smile


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.2815 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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