Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Примеры решения задач с использованием строк
Задача 1. Дана строка символов, состоящая из слов, слова разделены между собой пробелами. Удалить из строки все слова, начинающиеся с цифры Для решения этой задачи сформируем массив слов исходной строки, а затем перенесём в строку из этого массива только слова, удовлетворяющие поставленному условию. Этот прием можно использовать для решения большинства задач, в которых нужно удалять или добавлять слова в исходную строку.
#include <stdio.h> #include <string.h> void main() { char s[250], //исходная строка w[25], //слово mas[10][25]; //массив слов puts(”\nвведите строку”); gets(s); int k=0,t=0,i,len,j; len=strlen(s); while(t<len) { for(j=0,i=t;s[i]!= ’ ’;i++,j++) w[j]=s[i]; //формируем слово до пробела w[j]=’/0’; //формируем конец строки strcpy(mas[k],w); //копируем слово в массив k++; //увеличиваем счетчик слов //переходим к следующему слову в исходной строке t=i+1; } strcpy(s,””);//очищаем исходную строку for(t=0;t<k;t++) if(mas[t][0]<’0’ && mas[t][0]>’9’) //если первый символ не цифра { strcat(s,mas[t]);//копируем в строку слово strcat(s,” ”);//копируем в строку пробел } puts(s);//выводим результат }
Задача 2. Сформировать динамический массив строк. Удалить из него строку с заданным номером. В динамическом массиве строк каждая строка имеет свою длину, поэтому при формировании такого массива нужно выделять память под каждую строку отдельно.
#include <iostream.h> #include <string.h> void main() { int n; cout<<”\nN=?”; cin>>n;
//вспомогательная переменная для ввода строки char s[100];
char** mas=new char*[n]; for(int i=0;i<n;i++) { cout<<”\nS=?”; cin>>s; //вводим строку /*выделяем столько памяти, сколько символов в строке + один байт для ’\0’ */ mas[i]=new char[strlen(s)+1];
//копируем строку в массив strcpy(mas[i],s); }
for(i=0;i<n;i++) //вывод массива { cout<<mas[i]; cout<<"\n"; }
int k; cout<<"\nK=?"; cin>>k; //ввести номер удаляемой строки if(k>=n) { cout<<"There is not such string\n"; return; }
/*выделяем память для размещения нового массива строк (без строки с номером k)*/ char** temp=new char*[n-1]; int j=0;
//переписываем в новый массив все строки, кроме k-ой
for(i=0;i<n;i++) if(i!=k) { //выделяем память под строку temp[j]=new char[strlen(mas[i])];
//копируем строку strcpy(temp[j],mas[i]); j++; } n--;//уменьшаем размер массива
for(i=0;i<n;i++) //вывод нового массива { cout<<temp[i]; cout<<"\n"; } } Эту же задачу можно решить не выделяя память под элементы нового массива, а меняя указатели: temp[j]=mas[i];
/*выделяем память для размещения нового массива строк (без строки с номером k)*/ char** temp=new char*[n-1]; int j=0;
//переписываем в новый массив все строки, кроме k-ой
for(i=0;i<n;i++) if(i!=k) { temp[j]=mas[i];// меняем указатели
j++; } n--; //уменьшаем размер массива
delete []mas;//удаляем старый массив mas=temp;//ставим указатель на измененный массив for(i=0;i<n;i++) { cout<<mas[i]; //вывод массива cout<<"\n"; }
} 17. Функции в C++ С увеличением объема программы становится невозможно удерживать в памяти все детали. Чтобы уменьшить сложность программы, ее разбивают на части. В C++ задача может быть разделена на более простые подзадачи с помощью функций. Разделение задачи на функции также позволяет избежать избыточности кода, т. к. функцию записывают один раз, а вызывают многократно. Программу, которая содержит функции, легче отлаживать. Часто используемые функции можно помещать в библиотеки. Таким образом, создаются более простые в отладке и сопровождении программы. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 326. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |