Разделы презентаций


Символьные строки

Содержание

Зачем нужны символьные строки?char s[10]; // массив символовэлементы массива – отдельные объектысложно работать со строками переменной длиныХочется:строка – единый объектдлина строки может меняться во время работы программыstring s; // символьная строка

Слайды и текст этой презентации

Слайд 1Символьные строки
Программирование на языке C++

Символьные строкиПрограммирование на языке C++

Слайд 2Зачем нужны символьные строки?
char s[10]; // массив символов
элементы массива –

отдельные объекты
сложно работать со строками переменной длины
Хочется:
строка – единый объект
длина

строки может меняться во время работы программы

string s; // символьная строка

строка

Зачем нужны символьные строки?char s[10]; // массив символовэлементы массива – отдельные объектысложно работать со строками переменной длиныХочется:строка

Слайд 3Символьные строки
Начальное значение:
string s = "Привет!";
Вывод на экран:
cout

= "Привет!";
Присваивание:

Символьные строкиНачальное значение:string s =

Слайд 4Символьные строки
Ввод с клавиатуры:
cin >> s;
Отдельный символ:
s[4] = 'a';
Длина строки:
только

до пробела!
getline ( cin, s );
до перевода строки (Enter)
int n;
...
n

= s.size();

метод для объектов типа string

Символьные строкиВвод с клавиатуры:cin >> s;Отдельный символ:s[4] = 'a';Длина строки:только до пробела!getline ( cin, s );до перевода

Слайд 5Символьные строки
#include
using namespace std;
main()
{
string s;
int i;
cout

( i = 0; i < s.size(); i++ )
if ( s[i] == 'а' )
s[i] = 'б';
cout << s;
}

Задача: заменить в строке все буквы 'а' на буквы 'б'.

цикл по всем символам строки

Символьные строки#include using namespace std;main(){ string s; int i; cout

Слайд 6s = "0123456789";
s1 = s.substr( 3 ); // "3456789"
Операции

со строками
Объединение (конкатенация):
string s, s1, s2;
s1 = "Привет";
s2 =

"Вася";
s = s1 + ", " + s2 + "!";

"Привет, Вася!"

Срез (подстрока):

s = "0123456789";
s1 = s.substr( 3, 5 ); // "34567"

с какого символа

откуда

5

s =

Слайд 7Операции со строками
Вставка:
s = "0123456789";
s.insert( 3,"ABC" ); // "012ABC3456789"
что
куда
с какого

символа
Удаление:
s = "0123456789";
s.erase ( 3, 6 ); // "0129"
с какого

символа

сколько символов

Операции со строкамиВставка:s =

Слайд 8Поиск символа в строке
string s = "Здесь был Вася.";
int n;
n

= s.find ( 'с' ); // 3
find – искать
if (

n >= 0 )
cout << "Номер символа 'c': "
<< n << endl;
else cout << "Символ не найден.\n";

Слайд 9Поиск подстроки
string s = "Здесь был Вася.";
int n;
n = s.find

( "Вася" ); // 10
if ( n >= 0 )


cout << "Слово начинается с s["
<< n << "]\n";
else
cout << "Слово не найдено.\n";

Слайд 10Пример обработки строк
Задача: Ввести имя, отчество и фамилию. Преобразовать их

к формату «фамилия-инициалы».
Пример:
Введите имя, отчество и фамилию:

Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.

Алгоритм:
найти первый пробел и выделить имя
удалить имя с пробелом из основной строки
найти первый пробел и выделить отчество
удалить отчество с пробелом из основной строки
«сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…

Алибабаевич Хрюндиков

Хрюндиков

Хрюндиков В.А.

Пример обработки строкЗадача: Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы».  Пример:	 Введите имя,

Слайд 11Пример обработки строк
main()
{
string s, name, name2;
int n;
cout

s );
name = s.substr(0,1) + '.';// начало имени
n = s.find(' '); // найти пробел
s = s.substr ( n+1 ); // удалить имя
n = s.find(' '); // найти пробел
name2 = s.substr(0,1) + '.';// начало отчества
s = s.substr ( n+1 ); // осталась фамилия
s = s + ' ' + name + name2; // результат
cout << s;
}
Пример обработки строкmain(){ string s, name, name2; int n; cout

Слайд 12Преобразования «строка» – «число»
Из строки в число:
string s =

"123";
int N;
N = atoi ( s.c_str() ); // N

= 123

string s = "123.456";
float X;
X = atof ( s.c_str() ); // X = 123.456

«12x3»  12

в строку языка Си

Преобразования «строка» – «число» Из строки в число:string s =

Слайд 13Преобразования «строка» – «число»
Из числа в строку:
ostringstream ss;
string s;
int

N = 123;
ss

= "123"

#include

строковый поток вывода

из потока в строку

строковые потоки

Преобразования «строка» – «число» Из числа в строку:ostringstream ss;string s;int N = 123;ss

Слайд 14Преобразования «строка» – «число»
Вещественное число в строку:
ostringstream ss;
string s;
double

X = 123.456;
ss.width(10); // ширина поля
ss.precision(3); // знаков в

дробной части
ss << X;
s = ss.str(); // s =" 123.456"

ss.str(""); // очистка потока
ss.width(10); // ширина поля
ss.precision(6); // знаков в дробной части
ss << scientific << X; // научный формат
s = ss.str(); // s = "1.234560E+002"

Научный формат:

Преобразования «строка» – «число» Вещественное число в строку:ostringstream ss;string s;double X = 123.456;ss.width(10);  // ширина поляss.precision(3);

Слайд 15Строки в процедурах и функциях
Задача: построить процедуру, которая заменяет в

строке s все вхождения слова-образца wOld на слово-замену wNew.
пока //

слово wOld есть в строке s
// удалить слово wOld из строки
// вставить на это место слово wNew

wOld: '12'
wNew: 'A12B'

зацикливание

Строки в процедурах и функцияхЗадача: построить процедуру, которая заменяет в строке s все вхождения слова-образца wOld на

Слайд 16Замена всех экземпляров подстроки

Замена всех экземпляров подстроки

Слайд 17Замена всех экземпляров подстроки
main()
{
string s = "12.12.12";
replaceAll (

s, "12", "A12B" );
cout

Замена всех экземпляров подстрокиmain(){ string s =

Слайд 18Замена всех экземпляров подстроки
void replaceAll ( string &s, string wOld,


string

wNew )
{
string res = "";
int p, len = wOld.size();
while ( s.size() > 0 )
{
p = s.find ( wOld ); // искать образец
if ( p < 0 ) { // прицепить хвост и выйти }
if ( p > 0 ) { // скопировать часть до образца }
res = res + wNew; // добавить слово-замену
if ( p + len > s.size() ) s = "";
else s.erase ( 0, p + len );
}
s = res;
}

длина строки-образца

удалить начало


Слайд 19Замена всех экземпляров подстроки
p = s.find ( wOld );
if (

p < 0 )
{
res = res +

s;
break;
}

if ( p > 0 )
res = res + s.substr ( 0, p );

Если образец не найден:

Если перед образцом что-то есть:

прицепить «хвост»

выйти из цикла

Замена всех экземпляров подстрокиp = s.find ( wOld );if ( p < 0 )  { res

Слайд 20Замена: из процедуры в функцию
main()
{
string s = "12.12.12";
s

= replaceAll ( s, "12", "A12B" );
cout


}

string replaceAll ( string s, string wOld,
string wNew )
{
...
return res;
}


Слайд 21Рекурсивный перебор
Задача. В алфавите языке племени «тумба-юмба» четыре буквы: «Ы»,

«Ш», «Ч» и «О». Нужно вывести на экран все слова,

состоящие из L букв, которые можно построить из букв этого алфавита.

перебор L-1 символов

задача для слов длины К сведена к задаче для слов длины L-1!

Рекурсивный переборЗадача. В алфавите языке племени «тумба-юмба» четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести на

Слайд 22Рекурсивный перебор
перебор L символов
w[0]='Ы';
// перебор последних L-1

символов
w[0]='Ш';
// перебор последних L-1 символов
w[0]='Ч';

// перебор последних L-1 символов
w[0]='О';
// перебор последних L-1 символов
Рекурсивный переборперебор L символов w[0]='Ы';  // перебор последних L-1 символов w[0]='Ш';  // перебор последних L-1

Слайд 23Рекурсивный перебор
main()
{
string word = "...";
TumbaWords ( "ЫШЧО", word,

0 );
}
void TumbaWords( string A, string &w, int N )
{

int i;
if ( N == w.size() ) {
cout << w << endl;
return;
}
for ( i = 0; i < A.size(); i ++ ) {
w[N] = A[i];
TumbaWords ( A, w, N+1 );
}
}

уже установлено

когда все символы уже установлены

по всем символам алфавита

алфавит

слово

любая строка длины L

Рекурсивный переборmain(){ string word =

Слайд 24Сравнение строк
Сравнение по кодам символов:

Сравнение строкСравнение по кодам символов:

Слайд 25Сравнение строк
5STEAM 

Сравнение строк5STEAM 

Слайд 26Сортировка строк
main()
{
const int N = 10;
string s1, S[N];

int i, j;
cout

i = 0; i < N; i ++ )
getline ( cin, S[i] );
...
cout << "После сортировки: \n";
for ( i = 0; i < N; i++ )
cout << S[i] << endl;
}

for ( i = 0; i < N-1; i ++ )
for ( j = N-2; j >= i; j -- )
if ( S[j] > S[j+1] )
{
s1 = S[j];
S[j] = S[j+1];
S[j+1] = s1;
}

массив строк

Сортировка строкmain(){ const int N = 10; string s1, S[N]; int i, j; cout

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика