Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 18:47   #1
AntyDES
Пользователь
 
Регистрация: 07.04.2011
Сообщений: 19
Вопрос strlen("Русский текст")

Скорее всего данный вопрос уже поднимался...

strlen("Русский текст") не может правильно обработать кириллицу.

Латинские символы занимают один байт, а русские - два байта. Знаю что проблема в кодировке, но не знаю как устранить проблему. Символы вывода и ввода отоброжаются нормально.

P.S.: Windows Vista, NetBeans + cygwin


Код:
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char** argv) {
    char* text = "Кириллица";
    cout << text << " [" << strlen(text) << "]\n";
}
Код:
Кириллица [18]
Для закрытия терминала нажмите [Enter]...

Последний раз редактировалось AntyDES; 07.04.2011 в 19:27. Причина: добавлен код
AntyDES вне форума Ответить с цитированием
Старый 07.04.2011, 19:26   #2
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

setlocale(0,"Rus"), как я понял, вас не устраивает?
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 07.04.2011, 19:38   #3
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ну сделайте свою функцию lenght() которая возвращается strlen/2 делов то
onewho вне форума Ответить с цитированием
Старый 08.04.2011, 01:50   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

У strlen есть братья-сестры.
p51x вне форума Ответить с цитированием
Старый 08.04.2011, 11:41   #5
AntyDES
Пользователь
 
Регистрация: 07.04.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У strlen есть братья-сестры.
а поподробнее можно?

Ни к каким видимым эфектам ни одна из ниже написанных строк не помогает.
Код:
setlocale(LC_ALL, "Russian");
setlocale(LC_CTYPE, "rus.1251");
setlocale(0,"Rus");
AntyDES вне форума Ответить с цитированием
Старый 10.04.2011, 01:26   #6
EC.cpp
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 30
По умолчанию

onewho дело говорит - сделайте свою функцию подсчета длины.
Создайте указатель на строку - с его помощью можно буквально в 2 строки подсчитать длину любого строкового выражения в "нормальных" размерах.
EC.cpp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Русский пробел" - опечатка или неграмотность? alistiev Свободное общение 13 31.01.2011 15:01
Как заменить жирний текст "тис. грн." на обычний текст "тис. грн." Jaroslav Microsoft Office Word 2 01.09.2010 18:09
Напечатать текст, удалив из него все цифры и знаки "+" или "–". Язык С++. KaylasMKTY Помощь студентам 8 07.03.2010 21:35
strcpy(str, strlen(""), "") - error! nazavrik Общие вопросы C/C++ 2 09.02.2010 17:21
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04