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

Строки и русский алфавит - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
21.11.2011, 10:59     Строки и русский алфавит #1
В проге считываешь с файла строку на кириллице. Например: "ололо", длину выведет 10. Почему?
А как тогда со строкой, как с массивом в этом случае работать?
C++
1
temp.erase(5,6)
надо последний элемент вырезать слова из 6 букв, а не получается из-за длины строки странной.
C++
1
 temp[i]=char(tolower(temp[i]));//temp - строка
такая операция будет адекватно работать? Или надо по-другому?
Последний вопрос
C++
1
 temp[i]='ф';
- такое может правильно работать, или надо по-другому?

Добавлено через 10 часов 44 минуты
up!
пытался дебажить, а показывает мне значение temp 0 "" ?
я не понимаю, почему
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 10:59     Строки и русский алфавит
Посмотрите здесь:

Русский ввод и русский вывод C++
C++ Алфавит
русский алфавит C++
Алфавит вивод C++
C++ Русский и строки
Алфавит C++
C++ Алфавит и сравнение слов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
21.11.2011, 11:02     Строки и русский алфавит #2
Hi4ko, запрос сформулируй по человечески. Телепатов нет.
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
21.11.2011, 11:31  [ТС]     Строки и русский алфавит #3
Цитата Сообщение от Bers Посмотреть сообщение
Hi4ko, запрос сформулируй по человечески. Телепатов нет.
Есть у меня задача. С .txt файла брать слова и манипулировать(удалить последний элемент, изменить букву в строке и т.д)
У меня с этим есть проблемы
Например:
input.txt "Александр Сергеевич Пушкин"
C++
1
2
3
4
5
6
7
8
int main()
{
    ifstream in("input.txt");
string s;
in>>s; 
s[0]='Л';
cout<<s<<" "<<int(s.length())<<endl; 
}
Output:
(Среда: Netbeans 7.0.1)
��лександр 18
��ергеевич 18
��ушкин 12

Как сделать, чтобы можно было поменять в строке любой символ на другой и поменять регистр первой буквы, если слово начинается с большой буквы? И удалить последний символ в строке(через erase() бы сделал, но длину строки показывает странную)?
thick_int
Заблокирован
21.11.2011, 11:39     Строки и русский алфавит #4
Длина строки не странная. Просто в Вашем случаее каждый символ занимает 2 байта.
Это значит, что при работе с такимми файлами надо , как минимум пользоваться не типом char, а типом wchar_t.
Байт
 Аватар для Байт
14284 / 9115 / 1310
Регистрация: 24.12.2010
Сообщений: 16,667
21.11.2011, 11:54     Строки и русский алфавит #5
.Hi4ko, дружище! Все это заморочки UNICODE. У него свои функции определения длины, типа wstrlen вместо strlen. Лично я стараюсь UNICODE по возможности избегать. И твой пост только укрепил меня в этом намерении. Также стараюсь избегать AnsiString, методы его чудовищны и один другого не понимает. А если никуда не деться (все компоненты на нем построены) делаю strcpy(b, A.c_str()), работаю с b, потом A = b; "Оно надежней, да к тому и тише". И еще безумно раздражает в dfm штуки вроде Caption = "\1020..." там где должен быть русский текст. Вот такой я ретроград - имею право?
Ну что ж поделаешь, плетемся мы в хвосте цивилизации, правила игры выдуманы не нами - терпи!
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
21.11.2011, 12:36  [ТС]     Строки и русский алфавит #6
Цитата Сообщение от Байт Посмотреть сообщение
.Hi4ko, дружище! Все это заморочки UNICODE. У него свои функции определения длины, типа wstrlen вместо strlen. Лично я стараюсь UNICODE по возможности избегать. И твой пост только укрепил меня в этом намерении. Также стараюсь избегать AnsiString, методы его чудовищны и один другого не понимает. А если никуда не деться (все компоненты на нем построены) делаю strcpy(b, A.c_str()), работаю с b, потом A = b; "Оно надежней, да к тому и тише". И еще безумно раздражает в dfm штуки вроде Caption = "\1020..." там где должен быть русский текст. Вот такой я ретроград - имею право?
Ну что ж поделаешь, плетемся мы в хвосте цивилизации, правила игры выдуманы не нами - терпи!
C++
1
2
3
4
5
6
{
        wchar_t b[40];
        string temp; 
        in>>temp;
        strcpy(b,temp.c_str());
}
не даёт нормально перевести. Char и wchar_t не согласуются же(
Как нормально сделать?)
Bers
Заблокирован
21.11.2011, 12:41     Строки и русский алфавит #7
http://wm-help.net/books-online/prin.../59464-13.html
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
21.11.2011, 13:01  [ТС]     Строки и русский алфавит #8
признаюсь, я слаб, но я не могу найти, как явно преобразовать char[] в wchar_t[] в Linux. Точнее, простого примера программы не могу найти, где был бы char[] a и wchar_t [] b= a
Bers
Заблокирован
21.11.2011, 13:09     Строки и русский алфавит #9
Цитата Сообщение от Hi4ko Посмотреть сообщение
ризнаюсь, я слаб, но я не могу найти, как явно преобразовать char[] в wchar_t[] в Linux. Точнее, простого примера программы не могу найти, где был бы char[] a и wchar_t [] b= a
Я - агент корпорации Зла. Так что...

http://mbv06.ucoz.ru/forum/19-30-1
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
21.11.2011, 13:25  [ТС]     Строки и русский алфавит #10
Цитата Сообщение от Bers Посмотреть сообщение
Я - агент корпорации Зла. Так что...

http://mbv06.ucoz.ru/forum/19-30-1
ну я переведу кодировку .txt файла, который весь на кириллице.
Никак мне это не поможет, я думаю)
Ситуация такая. Считываем слово с файла. Надо его преобразовать так, чтобы с ним можно было работать, как с обычным массивом.
C++
1
2
3
4
ifstream in("input.txt");
wstring s;
wchar_t a[40];
in>>s //не работает
C++
1
2
3
4
5
ifstream in("input.txt");
string s;
wchar_t a[40];
in>>s;
wcscpy(a,s.c_str()); //не работает, потому что char и wchar_t
Так что я до сих пор не нашёл правильного способа перевода(
Bers
Заблокирован
21.11.2011, 13:31     Строки и русский алфавит #11
Цитата Сообщение от Hi4ko Посмотреть сообщение
ну я переведу кодировку .txt файла, который весь на кириллице.
Нет такой кодировки.

Твоя задача держать исходные данные в приемлемой кодировке.
И читать эти данные штатными средствами, которые понимают эту кодировку.
Байт
 Аватар для Байт
14284 / 9115 / 1310
Регистрация: 24.12.2010
Сообщений: 16,667
21.11.2011, 15:44     Строки и русский алфавит #12
C
1
2
char s[40];
in >> s;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 17:03     Строки и русский алфавит
Еще ссылки по теме:

C++ Алфавит. Все вариации
Циклический алфавит ascii C++
C++ Вывести на экран алфавит строки
C++ Пытаюсь создать алфавит
Алфавит 70-ричной системы счисления C++

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

Или воспользуйтесь поиском по форуму:
thick_int
Заблокирован
21.11.2011, 17:03     Строки и русский алфавит #13
Там есть такая маленькая тонкость (хотя я сам еще серьезно не изучал этот вопрос), связанная с тем, что в некоторых случаях при открытии файла, место, откуда происходит считывание, находится в самом конце этого файла.
Рекомендую, поэтому, очень внимательно прочитать, что происходит при открытии файла на те или иные операции и действовать сообразно.
Yandex
Объявления
21.11.2011, 17:03     Строки и русский алфавит
Ответ Создать тему
Опции темы

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