Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Hi4ko
74 / 74 / 12
Регистрация: 21.10.2010
Сообщений: 376
#1

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

21.11.2011, 10:59. Просмотров 1791. Ответов 12
Метки нет (Все метки)

В проге считываешь с файла строку на кириллице. Например: "ололо", длину выведет 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 "" ?
я не понимаю, почему
http://www.cyberforum.ru/cpp-beginners/thread851185.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 10:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Строки и русский алфавит (C++):

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

Вывести на экран алфавит строки
Нужно вывести на экран алфавит слова, то есть все различные буквы. К примеру,...

Русский и строки
вот есть такой кусок кода, сравнивающий строки: ...

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский...

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

12
Bers
Заблокирован
21.11.2011, 11:02 #2
Hi4ko, запрос сформулируй по человечески. Телепатов нет.
0
Hi4ko
74 / 74 / 12
Регистрация: 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() бы сделал, но длину строки показывает странную)?
0
thick_int
Заблокирован
21.11.2011, 11:39 #4
Длина строки не странная. Просто в Вашем случаее каждый символ занимает 2 байта.
Это значит, что при работе с такимми файлами надо , как минимум пользоваться не типом char, а типом wchar_t.
0
Байт
Эксперт C
17761 / 11786 / 2449
Регистрация: 24.12.2010
Сообщений: 23,701
21.11.2011, 11:54 #5
.Hi4ko, дружище! Все это заморочки UNICODE. У него свои функции определения длины, типа wstrlen вместо strlen. Лично я стараюсь UNICODE по возможности избегать. И твой пост только укрепил меня в этом намерении. Также стараюсь избегать AnsiString, методы его чудовищны и один другого не понимает. А если никуда не деться (все компоненты на нем построены) делаю strcpy(b, A.c_str()), работаю с b, потом A = b; "Оно надежней, да к тому и тише". И еще безумно раздражает в dfm штуки вроде Caption = "\1020..." там где должен быть русский текст. Вот такой я ретроград - имею право?
Ну что ж поделаешь, плетемся мы в хвосте цивилизации, правила игры выдуманы не нами - терпи!
1
Hi4ko
74 / 74 / 12
Регистрация: 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 не согласуются же(
Как нормально сделать?)
0
Bers
Заблокирован
21.11.2011, 12:41 #7
http://wm-help.net/books-online/print-page/59464/59464-13.html
1
Hi4ko
74 / 74 / 12
Регистрация: 21.10.2010
Сообщений: 376
21.11.2011, 13:01  [ТС] #8
признаюсь, я слаб, но я не могу найти, как явно преобразовать char[] в wchar_t[] в Linux. Точнее, простого примера программы не могу найти, где был бы char[] a и wchar_t [] b= a
0
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
0
Hi4ko
74 / 74 / 12
Регистрация: 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
Так что я до сих пор не нашёл правильного способа перевода(
0
Bers
Заблокирован
21.11.2011, 13:31 #11
Цитата Сообщение от Hi4ko Посмотреть сообщение
ну я переведу кодировку .txt файла, который весь на кириллице.
Нет такой кодировки.

Твоя задача держать исходные данные в приемлемой кодировке.
И читать эти данные штатными средствами, которые понимают эту кодировку.
0
Байт
Эксперт C
17761 / 11786 / 2449
Регистрация: 24.12.2010
Сообщений: 23,701
21.11.2011, 15:44 #12
C
1
2
char s[40];
in >> s;
0
thick_int
Заблокирован
21.11.2011, 17:03 #13
Там есть такая маленькая тонкость (хотя я сам еще серьезно не изучал этот вопрос), связанная с тем, что в некоторых случаях при открытии файла, место, откуда происходит считывание, находится в самом конце этого файла.
Рекомендую, поэтому, очень внимательно прочитать, что происходит при открытии файла на те или иные операции и действовать сообразно.
0
21.11.2011, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 17:03
Привет! Вот еще темы с решениями:

Алфавит
Каждой букве русского алфавита соответствует соответствующий номер А=1, Б=2 и...

Алфавит
You given N and one line of length N (1&lt;=N&lt;=1000)than consist of letter in...

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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