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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.88
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Функция size() стандартного класса string - C++

31.08.2012, 10:20. Просмотров 4671. Ответов 40
Метки нет (Все метки)

Добрый день. При поптыке посчитать количество символов в введённой строке на латыне - отображает верный результат, а кириллицу читает неправильно. Компилятор GNU C++. В чём может быть дело и как исправить эту ошибку?

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
  string line;
  cout << "Введите, пожалуйста, фразу: " << endl;
  getline(cin, line);
  cout << line.size();
  return 0;
}
Если ввести: Hello World! Результат будет 12
Если ввести: Привет Мир! Результат будет 20
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2012, 10:20     Функция size() стандартного класса string
Посмотрите здесь:

C++ Функция ввода для класса string
C++ Приведение типов string.size() к (void*)
C++ Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! C++
C++ Что возвращает функция size()?
Как сделать, чтобы функция класса могла работать с обьектами другого класса C++
C++ Функция стандартного нормального отклонения (аналог NORMSDIST из Excel)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2012, 09:47     Функция size() стандартного класса string
Еще ссылки по теме:

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" C++
Заменить поле класса со стандартного типа на пользовательский C++
Перегрузка операций: friend-функция или функция-член класса C++
Заполнить квадратную матрицу змейкой по диагонали, начиная с элемента matrix[size-1][size-1] C++
Выход из цикла методом size() класса string C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.09.2012, 09:47     Функция size() стандартного класса string #41
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Тогда я не могу почему в студии вот такой расклад
Юра, позволь я завершу ваш с Грызликом спор.
По неизвестной мне причине, кодпад автоматически сохраняет строку в мультибайте (русские символы там по два байта получаются как раз) и при компиляции так же использует мультибайт. Студия этого не делает (совершенно правильно поступает при этом).
Если вручную повторить перевод юникодовской строки в мультибайт, то результат студии совпадает с кодпадом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <iostream>
#include <Windows.h>
using namespace std;
 
 
int main(int argc, char* argv[])
{
    wchar_t rus[] = L"Привет мир!";
    char utf8[256] = {0};
 
    DWORD result = ::WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, rus, -1, utf8, 255, 0, 0 );
 
    DWORD err = GetLastError();
 
    string line = utf8;
    for(int i = 0; i < (int)line.size(); i++)
        cout<<i<<" - "<<(int)line[i]<<endl;
 
    cin.get();
    return 0;
}
Yandex
Объявления
02.09.2012, 09:47     Функция size() стандартного класса string
Ответ Создать тему
Опции темы

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