Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Строки в языке C++
8.3 Тип данных string
Кроме работы со строками как с массивом символов, в C++ существует специальный тип данных string. Для ввода переменных этого типа можно использовать cin1При работе c командой cin, как отмечалось ранее, ввод осуществляется до пробела или специальную функцию:
getline(cin,s);
Здесь s — имя вводимой переменной типа string.
При описании переменной типа string можно сразу присвоить ей значение:
string имя_переменной(s);
Здесь имя_переменной — идентификатор типа string, s — строковая константа. Например, команда
string v("Hello");
создаёт строку v, в которую записывается значение Hello.
Доступ к -му элементу строки осуществляется стандартным образом:
имя_строки[номер_элемента];
Над строками типа string определены следующие операции:
- присваивание, например s1=s2;
- объединение строк (s1+=s2 или s1=s1+s2) — добавляет к строке s1 строку s2, результат хранится в строке s1, например:
#include <iostream> #include <string> using namespace std; int main ( ) { stringa, b; cout<<" a = "; getline ( cin, a ); cout<<" b = "; getline ( cin, b ); a+=b; cout<<" a = "<<a<<endl; return 0; }
- сравнение строк на основе лексикографического порядка: s1==s2, s1!=s2, s1<s2, s1<=s2, s1>s2, s1>=s2 — результатом операций сравнения будет логическое значение;
При обработке строк типа string можно использовать следующие функции2В описанных ниже функциях строки s и s1 должны быть типа string.:
- s.length() — возвращает длину строки s;
- s.substr(pos, length) — возвращает подстроку из строки s, начиная с номера pos длиной length символов;
- s.empty() — возвращает значение true, если строка s пуста, false — в противном случае;
- s.insert(pos, s1) — вставляет строку s1 в строку s, начиная с позиции pos;
- s.remove(pos, length) — удаляет из строки s подстроку length длиной pos символов;
- s.find(s1, pos) — возвращает номер первого вхождения строки s1 в строку s, поиск начинается с номера pos, параметр pos может отсутствовать, в этом случае поиск идёт с начала строки;
- s.findfirst(s1, pos) — возвращает номер первого вхождения любого символа из строки s1 в строку s, поиск начинается с номера pos, параметр pos может отсутствовать, в этом случае поиск идёт с начала строки.
Задача 8.1. Некоторый текст хранится в файле text.txt. Подсчитать количество строк и слов в тексте.
Предлагаем читателю самостоятельно разобраться в приведённом программном коде.
#include <iostream> #include <fstream> #include < std lib .h> #include <iomanip> using namespace std; int main ( ) { ifstream f; int p, j, i, kol,m, n=0; stringS [ 10 ]; f.open ( " text.txt " ); if ( f ) { while ( ! F.eof ( ) ) { getline ( f, S [ n ] ); cout<<S [ n]<<" \n "; n++; } f.close ( ); cout<<endl; cout<<"Количество строк в тексте - "<<n<<endl; for ( kol =0, i =0; i<n; i++) { m=S [ i ].length( ); S [ i ]+=" "; for ( p=0;p<m; ) { j=S [ i ].find ( " ", p ); if ( j !=0) { kol++; p=j +1;} else break; } } cout<<"Количество слов в тексте - "<<kol<<endl; } else cout<<"Файл не найден"<<endl; return 0; }
Результаты работы программы:
Если видим, что с картины Смотрит кто-нибудь на нас, Или принц в плаще старинном, Или в робе верхолаз, Лётчик или балерина, Или Колька, твой сосед, Обязательно картина Называется портрет. Количество строк в тексте - 8 Количество слов в тексте - 29