Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 6 лет назад пользователемАкбар Саттаров
1 Ассистент кафедры «Основы информатики» Ташкентского Университета Информационных Технологий Лектор: Саттаров Акбар Бахтиярович Тема: Размерности строк на С++ и работа с ними План: 1. Строки типов String; 2. Функция копирования часть строки на другую строку; 3. Функция присвоения часть строки на другую строку; 4. Функции размещения, стирания, изменения, выделения и поиска часть строки на другую строку; 5.Заключение. Лекция 5
2 На языке C++ для стандартных типов строк используется тип string и он входит в классу типов string. Для этого типа строк знак \0 не является окончанием и он является простым массивными знаками. Результат длины строки типа string динамически меняется, потому что в его состав входит несколько функций облегчающих работу. Переменные типов string объявление выглядит следующим образом: string s1,s2,s3;
3 Для этих строк определяются особые задачи и функции. Существует различные способы объявления начальных значений типов string: string s1=первый способ; string s2(второй способ); string s3(s2); string s4=s2;
4 Используются следующие функции для перехода части первой строки на другую и их прототип следующий: assign(const string &str); assign(const string &str, unsigned int pos, unsigned int n); assign(const char *str, int n); Значение первой функции эквивалентно задаче: выводит строку типа string с переменной str или константу строки: string s1,s2; s1=первая строка; s2.assign(s1); // s2=s1 эквивалент задаче
5 Пример: string s1,s2,s3; s1= ; s2.assign(s1,4,5); // s2=45678 s3.assign(s1,2,20); // s3= Еще один пример: char * strold; cin.getline(strold,100);//вводится string s1,s2; s2.assign(strold,6); // s2= s3.assign(strold,20); // s3=
6 Функции присвоения часть строки на другую строку выглядит следующим образом : append(const string &str); append(const string &str, unsigned int pos, unsigned int n); append(const char *str, int n); Разница между этими функциями и выше указанными функциями assign в том, что в конец строки вызываемую эту функцию добавляет саму строку str или его часть.
7 Например: char * sc; cin.getline(sc,100); //вводится string s1,s,s2; s2=sc; s1=пример; s=aaa; //s2= s2.append(abcdef); //задача s2+=abcdef //и s2= abcdef s1.append(s2,4,5); //s1=пример s.append(ss,5); // s=aaa012345
8 Для размещения одной строки внутрь на вторую строку используются следующие функции: insert(unsigned int pos1,const string &str); insert(unsigned int pos1,const string & str, unsigned int pos2,unsigned int n); insert(unsigned int pos1,const char *str, int n); Эти функции работают как append, разница в том, что размещение строки str или его часть начинается с указанной позиции pos1. Тогда символы находящиеся на позиции pos1 сдвигаются на право.
9 Например: char * sc; cin.getline (sc,100); //вводится строка unsigned int i=3; string s1,s,s2; s2=sc; s1=misollar; s=xyz; // s2= s2.insert(i,abcdef); // s2=012abcdef s1.insert(i-1,s2,4,5); // s1=при меры s.insert(i-2,sc,5); // s=x01234yz
10 Для стирания части строки необходимо использовать следующие функции: erase(unsigned int pos=0,unsigned int n=npos); Эта функция стирает n знаков после указанной позиции pos1. Если pos1 неуказанно, то функция стирает с начало строки. Если не указывается n, то стираются все символы до конца строки:
11 Например: string s1,s2,s3; s1= ; s2=s1;s3=s1; s1.erase(4,5); // s1=01239 s2.erase(3); // s2=012 s3.erase(); // s3= Функция void clear() полностью очищает вызываемую строку. Например: s1.clear(); //строка будет пустой (s1=)
12 Для замены части строки на другую используются следующие функции: replace(unsigned int pos1,unsigned int n1, const string & str); replace(unsigned int pos1,unsigned int n1, const string & str,unsigned int pos2, unsigned int n2); replace(unsigned int pos1,unsigned int n1, const char *str, int n); Эти функции работают как insert, в отличии от него он заменяет n1 элементов позиции pos1 на n2 элементы позиции pos2 из строки str.
13 Пример: char * sc= ; unsigned int i=3,j=2; string s1,s,s2; s2=sc; s1=примеры; s=xyz; // s2= s2.replace(i,j,abcdef); // s2=012abcdef56789 s1.replace(i-1,j+1,s2,4,5); // s1=при меры s.replace(i-2,j+2,sc,5); // s=x функция swap(string & str) используется для замены двух строк. Например: string s1,s2; s1=01234; s2= ; s1.swap(s2); // s2=01234 и s1=
14
Прототип функции следующий: string substr (unsigned int pos=0, unsigned int n=npos)const; Эта функция возвращает n символов с позиции строки pos1. Если pos1 неуказанно, возвращает значения с начало строки, если n неуказанно, возвращает значения всех символов до конца строки: string s1,s2,s3; s1= ; s2=s1; s3=s1; s2=s1.substr(4,5); // s2=45678 s3=s1.substr(3); // s3= cout<
15 Для перевода типа string на char тип используется функция: const char * c_str()const; Эта функция возвращает указывающую константу строки типа char оканчивающим со знаком \0 : char *s1; string s2= ; s1=s2.c_str(); Также еще используется функция const char * data()const; Но эта функция не добавляет знак \0 в конец строки.
16 Определены несколько вариантов функций, которые ищет частей строки класса string. Рассмотрим основных из них: unsigned int find(const string &str, unsigned int pos=0)const; Функция будет искать строку str с позиции pos и возвращает первое совпадающийся значение индекса строки, иначе возвращает максимальное целое значение npos (npos= ), если (pos) незадача, тогда он ищет с начало строки. unsigned int find(char c.unsigned int pos=0)const; Различие этой функции от другой в том, что он ищет символ s из строки.
17 unsigned int rfind(const string &str, unsigned int pos=npos)const; Функция возвращает индекс первого совпадения строки str вместо указанной позиции pos, иначе возвращается значение npos, если pos неуказанно то он ищет до конца строки. unsigned int rfind(char c.unsigned int pos=npos) const; Разница этой функции от предыдущих в том, что он ищет символ s из строки.
18 Для сравнения частей строк используется функция compare: int compare(const string &str)const; int compare(unsigned int pos1,unsigned int n1, const string & str) const; int compare(unsigned int pos1,unsigned int n1, const string & str,unsigned int pos2, unsigned int n2)const;
19 В первой форме функции две строки полностью сравниваются: функция возвращает отрицательное число, если функция меньше чем вызываемая строка str, возвращает 0, если они будут равны и положительное число, если функция больше чем вызываемая строка str. Во второй форме тоже как и в первой выполняются те же задачи, только функция сравнивывает строку str с начало позиции pos1 количеством знаков n1. В третей форме функция сравнивает между собой n1 элементов строки pos1 с n2 элементов строки pos2.
20
Например: 1. #include 2. void main() 3. { 4. String s1= ab2csef, s2=456, s3=ghk; 5. cout<
21 1. #include 2. #include 3. int main(int argc, char* argv[]) 4. { 5. const int ФИО_длина=50; 6. string * Студент; 7. char * Satr=(char*)malloc(ФИО_длина) ; 8. unsigned int колич_студент; 9. char число[3]; 10. do 11. { 12. cout<<Введите количество студентов: "; 13. cin>>число; 14. } 15. while((колич_студент=atoi(число ))<=0); 16. Студент =new string[колич_студентов]; 17. cin.ignore(); 18. for(int i=0; i<колич_студент; i++) 19. { 20. cout< >число; 14. } 15. while((колич_студент=atoi(число ))<=0); 16. Студент =new string[колич_студентов]; 17. cin.ignore(); 18. for(int i=0; i<колич_студент; i++) 19. { 20. cout<
22
bool изменен=true; 24. for(int i=0; i<колич_студент-1 && изменен; i++) 25. {изменен=false; 26. for(int j=i; j<колич_студент-1; j++) 27. if(Студент[j].compare(Студент[j+ 1])>0) 28. { 29. изменен=true; 30. strcpy(строка,Студент[j].data()); 31. Студент[j].assign(Студент[j+1]); 32. Студент[j+1].assign(Строка); 33. } 34. } 35. cout<<Список по алфавиту:\n"; 36. for(int i=0; i<колич_студент; i++) 37. cout<<Студент[i]<
23 Существует функции определяющие длину строки класса string, его пустоту или объем занимаемого в памяти: unsigned int size()const; // размер строки unsigned int length()const; // кол. элементов строки unsigned int max_size()const; // максимальная длина строки ( ) unsigned int capacity()const;// объем строки занимаемой в памяти bool empty()const; // true, если строка пустая
24 Переменные типа String являются динамическими массивами и в них хранятся до 255 символов. Определены несколько функций для работы с такими переменными типа. В некоторых компиляторах вид этих функций изменен, но по его названию не трудно определить какую работу он делает.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.