Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Примеры решения задач с использованием строк




 

Задача 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; просмотров: 286.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...