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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.88
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
31.08.2012, 10:20     Функция size() стандартного класса string #1
Добрый день. При поптыке посчитать количество символов в введённой строке на латыне - отображает верный результат, а кириллицу читает неправильно. Компилятор 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2012, 09:47     Функция size() стандартного класса string
Еще ссылки по теме:

C++ Функция стандартного нормального отклонения (аналог NORMSDIST из Excel)
Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" C++
Заменить поле класса со стандартного типа на пользовательский C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 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
Ответ Создать тему
Опции темы

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