|
Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не 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