Хелпикс

Главная

Контакты

Случайная статья





Пример 7.12.. Примеры программирования



Пример 7.12.

char* w, *word;  
w=strpbrk(str," ,.?"); //w указывает на символ-разделитель в str
while(w!=NULL) // Цикл по всем словам
{  
n=w–str; // n - длина слова
strncpy(word,str,n); // word - текущее слово
word[n++]='\0'; // Нуль-символ в конец строки
cout<<word;        
str+=n; // Анализ следующей части строки
w=strpbrk(str," ,.?"); // Поиск символа-разделителя в stroka
}  

Примеры программирования

Пример 7.13. Дана строка символов. Вывести на экран четыре самых коротких слова строки.

#include <string.h>

#include <iostream>

#include <conio.h>

using namespace std;

 

void main(void)

{

char str[80]; // str - исходная строка
clrscr(); // Очистить экран
cout<<"Введите строку >";  
cin.get(str,80); // Ввести строку
char word[10][20]; // word - массив слов
int k=0; //k - количество слов в строке str

/* Формирование массива слов word из строки str */

for(int i=0;i<strlen(str);i++)

// Пока не конец строки

{

 

while(str[i]==' ') continue;

// Пропуск пробелов в str

int j=0;

// Количество символов в слове

// word[k]

/* Пока текущий символ не пробел и не нуль-символ */

while(str[i]!=' ' && str[i]!='\0')

 

         word[k][j++]=str[i++];

// Формирование k-го слова в

//массиве word

word[k++][j]='\0';

// Нуль-символ в конец слова

}

 

       

/* Сортировка слов в порядке увеличения их длины */

char* sh_word=new char[20];   // sh_word - короткое слово из //неотсортированных слов
for(i=0;i<k;i++) // Цикл по всем словам // массива word
{  
    strcpy(sh_word,word[i]); // Пусть i-е слово будет // самым коротким
    int num=i; // Номер короткого слова в // массиве = i

/* Поиск короткого слова среди неотсортированных в массиве слов */

for(int j=i;j<k;j++)

 

/* Если длина текущего слова меньше, чем длина короткого слова */

if(strlen(word[j])<strlen(sh_word))

 

{    /*Короткое слово - это текущее слово */

   
   strcpy(sh_word,word[j]);

 

   num=j;

// Номер короткого слова в //массиве = j */

}

 

strcpy(word[num],word[i]);

// Обмен местами i-го слова и //короткого слова

strcpy(word[i],sh_word);

 

}

 

for(i=0;i<4;i++)

// Вывод на экран четырех

cout<<word[i]<< " ";

// самых коротких слова

delete[ ] sh_word;

//Освобождение динамической

//памяти

getch(); 

// Ожидание нажатия ENTER

}

 

         

Результат выполнения программы.

Введите строку >один два три четыре пять шесть

два три один пять

Пример 7.14. Дана строка символов, разделенных пробелами, точками, запятыми. Сформировать новую строку, содержащую слова исходной строки, поставив перед самыми короткими словами в строке символ * (звездочка).

/* Директивы препроцессору о подключении заголовочных файлов */

#include <string.h>

#include <iostream>

#include <conio.h>

using namespace std;

/* Начало программы */

void main(void)

{

char* str  = new char[80];

// str - исходная строка

 char* word = new char[20];

// word - слово в строке

char* newstr = new char[80];

// newstr - новая строка

cout<<"Введите строку >";

 

cin.get(str,80);

// Ввод строки

 

/* Пусть длина самого короткого слова = длине строки */

int minlen = strlen(str);

 

 

// stroka = str + 'пробел'

char* stroka = new char[strlen(str)+2];

 

strcpy(stroka,str);

 

strcat(stroka," ");

 

word=strtok(str," ,.?");  

 

while(word)

// word - первое слово в строке

{

 

       

/* Если длина короткого слова меньше длины текущего слова, то длина короткого слова = длине текущего слова */

   if(minlen>strlen(word)) minlen=strlen(word);

 

   word=strtok(NULL," ,.?");

// Следующее слово

/* Выделение динамической памяти */

 
word=new char[20];

 

       

/* Формирование новой строки */

int n;

 

newstr[0]='\0';

// newstr - пустая строка

str[0]='\0';

// str - пустая строка

 

// word указывает на символ-разделитель в stroka

word=strpbrk(stroka," ,.?");

 

while(word!=NULL)

// Цикл по всем словам

{

 

   n=word-stroka;

// n - длина слова

   strncpy(str,stroka,n);

// str - текущее слово

   str[n++]='\0';

 
       

/* Если длина текущего слова равна длине самого короткого слова, то в newstr заносим символ '*' */

   if(strlen(str)==minlen) strcat(newstr,"*");

 

   strcat(newstr,str);

// В newstr записывается

// текущее слово

   strcat(newstr," ");

// В newstr записывается пробел

   stroka+=n;

// Анализ следующей части строки

   word=strpbrk(stroka," ,.?"); // Поиск символа разделителя

                                                // в stroka

}

 

cout<<newstr;

// Вывод новой строки на экран

}

 

       

Результат выполнения программы.

Введите строку >один, два три, еще три, еще один

один *два *три *еще *три *еще один

Пример 7.15.Дана строка. В строке имеются символы '*'. Подсчитать количество подстрок, заключенных между символами '*'. Определить самую длинную подстроку.

/* Директивы препроцессору о подключении заголовочных файлов */

#include <string.h>

#include <iostream>

#include <conio.h>

using namespace std;

/* Начало программы */

void main(void)

 

{

char* str = new char[80];

// str - исходная строка 

cout<<"Введите строку >";

 

cin.get(str,80);

// Ввод строки

int count = 0,

// Количество подстрок

   maxlen = 0,

// Длина наибольшей подстроки

   pos    = 0,

// Номер текущей позиции в str

 j      = 0;

// Счетчик символов в подстроке

char* substr = new char[80];

// substr - текущая подстрока

char maxstr[80];

// maxstr - наибольшая подстрока

maxstr[0]='\0';

// maxstr - пустая строка 

for(int i=0;i<strlen(str);i++)

// Цикл - по всей исходной

// строке

if(str[i]=='*')

// Если текущий символ = '*'

{                /* Формирование подстроки */

 
   substr[j]='\0';

 

   count++;

// Увеличение количества

// подстрок на 1

   if(count>1)

// Если это не первый символ '*'

   {

 

        if(maxlen<=i–pos) 

 

       

/* Если длина наибольшей подстроки меньше или равна длине текущей подстроки, то длина наибольшей подстроки = длине текущей подстроки, а наибольшая подстрока = текущей подстроке */

   {

 

        maxlen=i–pos;

 

        strcpy(maxstr,substr);

 

    }

 

}

 

substr[0]='\0';

// substr - пустая строка

pos=i+1;

//Анализ следующей части

// исходной строки

j=0;

// Установка начальных значений

}

 

       

/* Если текущий символ не '*', то переписываются текущие символы из исходной строки в подстроку */

else substr[j++]=str[i];

 

 
 

// Вывод результатов

 

cout<<"Количество подстрок >",– –count<<endl;

   

cout<<"Наибольшая подстрока >"<<maxstr<<", длиной "<<maxlen;

 

getch();

// Ожидание нажатия ENTER

 

}

 

 
           

Результат выполнения программы.

Введите строку > один *два и три *еще три *еще один

Количество подстрок >2

Наибольшая подстрока >два и три, длиной 10

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.