Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
#1

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

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

русский алфавит - C++
//--------------------------------------------------------------------------- #include <stdio.h> #include <conio.h> ...

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

Русский и строки - C++
вот есть такой кусок кода, сравнивающий строки: while(getline(user_state, buffer)){ cout << "\n" << buffer; ...

Русский ввод и русский вывод - C++
Я знаю, что для того, чтобы был виден русский язык, я использую команду setlocale(LC_ALL,"Russian") Для того, чтобы в переменные...

Алфавит - C++
Каждой букве русского алфавита соответствует соответствующий номер А=1, Б=2 и т.д. Написать программу которая при вводе пользователем...

Алфавит - C++
You given N and one line of length N (1<=N<=1000)than consist of letter in interval A..Z. Your task is to find out how often each letter...

12
Bers
Заблокирован
21.11.2011, 11:02 #2
Hi4ko, запрос сформулируй по человечески. Телепатов нет.
0
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() бы сделал, но длину строки показывает странную)?
0
thick_int
Заблокирован
21.11.2011, 11:39 #4
Длина строки не странная. Просто в Вашем случаее каждый символ занимает 2 байта.
Это значит, что при работе с такимми файлами надо , как минимум пользоваться не типом char, а типом wchar_t.
0
Байт
Нарушитель
Эксперт C
16672 / 10933 / 1675
Регистрация: 24.12.2010
Сообщений: 21,312
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 / 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 не согласуются же(
Как нормально сделать?)
0
Bers
Заблокирован
21.11.2011, 12:41 #7
http://wm-help.net/books-online/print-page/59464/59464-13.html
1
Hi4ko
74 / 74 / 4
Регистрация: 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 / 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
Так что я до сих пор не нашёл правильного способа перевода(
0
Bers
Заблокирован
21.11.2011, 13:31 #11
Цитата Сообщение от Hi4ko Посмотреть сообщение
ну я переведу кодировку .txt файла, который весь на кириллице.
Нет такой кодировки.

Твоя задача держать исходные данные в приемлемой кодировке.
И читать эти данные штатными средствами, которые понимают эту кодировку.
0
Байт
Нарушитель
Эксперт C
16672 / 10933 / 1675
Регистрация: 24.12.2010
Сообщений: 21,312
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
Привет! Вот еще темы с ответами:

Алфавит вивод - C++
Как сделать, при вводе числа, мне видавало соответвующею букву...Например ввожу 1 и мне выводится буква а....2 - b и т.д.? Добавлено...

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

Циклический алфавит ascii - C++
Приветствую! Как сделать циклический алфавит? Т.е. после Z идет A. str1 += max;

Алфавит. Все вариации - C++
Интересненькая задачка. Нужно вывести все варианты алфавита, точнее его букв. То есть нужно вывести. а|а б|б ..... я|я .... ...


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

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

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