Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2136 / 487 | Длительность: 24:14:00
Лекция 8:

Строки в языке C++

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >

8.3 Тип данных string

Кроме работы со строками как с массивом символов, в C++ существует специальный тип данных string. Для ввода переменных этого типа можно использовать cin1При работе c командой cin, как отмечалось ранее, ввод осуществляется до пробела или специальную функцию:

getline(cin,s);

Здесь s — имя вводимой переменной типа string.

При описании переменной типа string можно сразу присвоить ей значение:

string имя_переменной(s);

Здесь имя_переменнойидентификатор типа string, s — строковая константа. Например, команда

string v("Hello");

создаёт строку v, в которую записывается значение Hello.

Доступ к i-му элементу строки осуществляется стандартным образом:

имя_строки[номер_элемента];

Над строками типа 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
< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?