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

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

Читайте также:
  1. I. ГИМНАСТИКА, ЕЕ ЗАДАЧИ И МЕТОДИЧЕСКИЕ ОСОБЕННОСТИ
  2. I. ЗАДАЧИ ПЕДАГОГИЧЕСКОЙ ПРАКТИКИ
  3. I. Основы применения программы Excel
  4. I. Ситуационные задачи и тестовые задания.
  5. II съезд РСДРП. Принятие программы и устава. Возникновение большевизма.
  6. II. Основные задачи и функции
  7. II. ЦЕЛИ, ЗАДАЧИ И ПРИНЦИПЫ ДЕЯТЕЛЬНОСТИ ВОИ
  8. II. Цель и задачи государственной политики в области развития инновационной системы
  9. III. Цели и задачи социально-экономического развития Республики Карелия на среднесрочную перспективу (2012-2017 годы)
  10. VI. ДАЛЬНЕЙШИЕ ЗАДАЧИ И ПУТИ ИССЛЕДОВАНИЯ
  11. X. примерный перечень вопросов к итоговой аттестации
  12. Алекс сидел за ограждением позади сцены, где фанатов не было, и давал интервью для какой-то программы.

Исходным текстом является предложение, заканчивающееся точкой. Слова в предложении отделяются друг от друга одним пробелом. Определить самое длинное слово в предложении.

#include "stdafx.h"

#include<string.h>

int main()

{ char slovo[12],X[120]; // описание массивов для предложений

int i,m=0,n,k=0,dl;

gets(X); // ввод исходного предложения в X

dl= strlen(X);// определяем длину введенного предложения

 

for(i=0; i<dl; i++) //цикл от начала до конца строки X

if(X[i]!=' ') k++; // считаем символы до пробела

else // если дошли до пробела

{ if (k>m) //поиск мах значения счетчика к

{ m=k; // запоминаем длину текущего длинного слова

n=i; // запоминаем номер пробела, идущего за длинным словом

}

k=0; //обнуляем счетчик для нового слова предложения Х

}

k=0;

for(i=n-m;i<n;i++)//выбор из строки X самого длинного слова в массив slovo

slovo[k++]=X[i];

slovo[k]=0; //ставим в массиве slovo признак конца текста

 

printf("%s\n",slovo); //вывод найденного длинного слова

printf("%d\n",strlen(slovo));//вывод его длины

return 0;

}

Более полный перечень функций работы со строками и символами смотрите в приложении А. Эти функции позволяют достичь высокой эффективности работы программы, использующей их. Но они весьма неудобны и небезопасны в использовании, поскольку выход за границы строкового массива не проверяется.

 

Библиотека языка С++: Тип данных string стандартной библиотеки языка С++ лишен этих недостатков. С помощью операций и методов этой библиотеки длина строки может динамически меняться в соответствии с потребностями. Для использования класса string к программе надо подключить заголовочный файл <string>.

Для создания строки типа string определено несколько конструкторов. Приведем примеры создания строк:

string s1; //создание пустой строки

string s2("Привет"); //создание строки со значением Привет

string s3(s2); //создание строки s3 со значением строки s2;

К строке типа string можно применять операции старого стиля, например:

s1=’X’; // присвоение строке s1 значения символа Х

s1="ура"; //запись в строку s1 слово ура.

s2=s1; //присвоение значения строке s2 значения строки s1

 

Над объектами класса string допустимы операции:

операция действие операция действие
= присваивание > больше
+ конкатенация >= больше либо равно
= = сравнение на равенство [ ] индексация
!= неравенство << потоковый вывод
< меньше >> потоковый ввод
<= меньше либо равно += добавление

Для работы со строками этих операций недостаточно. Для работы со строками целиком и для обработки частей строк в классе string определено множество разнообразных методов (функций). Библиотека С++ содержит функции присваивания части одной строки другой строке (assing), добавления части одной строки к другой строке (append),вставки в одну строку части другой строки (insert), очистки строки (clear), выделения части строки (substr), поиск подстроки в строке (find), сравнение частей строк (compare), получение характеристик строк: определение количества элементов строки (size или length), максимальная длина строки (max_size), определение, является ли строка пустой (empty). Наиболее употребительные из них описаны в библиотеке <string> приложения А.

Рассмотрим пример обработки строк с использованием средств языка С и библиотеки языка С++.

Вариант использования средств языка С:

#include "stdafx.h"

#include<string.h>

#include "iostream"

using namespace std;

int main()

{ setlocale(0,"RUS");

char С1[50],С2[50],С3[50]= "";//строки с завершающим нулем

char *flag;

//Заполняем массивы исходной информацией

strcpy(С1,"Миру ");

strcpy(С2,"Мир! ");

//Объединяем массивы С1 и С2 в массив С3

strcat(С3,С1);

strcat(С3,С2);

cout<< С3<<endl;

// Сравниваем массив С1 с С2

if (strcmp(С1,С2) < 0) cout<< С1; else cout <<С2;

//поиск в строке С3 подстроки ”Ми”

flag=strstr(С3, "Ми");

if(flag)

printf("\nтакая подстрока есть\n");

else

printf("\nнет такой подстроки\n");

return 0;

}

Напишем эту же программу средствами библиотеки С++

#include "stdafx.h"

#include<string>

#include "iostream"

using namespace std;

 

int main()

{ setlocale(0,"RUS");

string С1,С2,С3; //строки

С1="Миру ";

С2="Мир! ";

//объединение строк

С3=С1+С2;

cout << С3<<endl;

// Сравнение строк

if (С1 < С2) cout<< С1; else cout << С2;

// Поиск в строке С1 подстроки "Ми"

int flag = С1.find("Ми");

if(flag>=0)

printf("\nтакая подстрока есть\n");

else

printf("\nнет такой подстроки\n");

return 0;

}

Не надо искать смысл в написанных программах. Они написаны только для того, чтобы сравнить запись одних и тех же действий, средствами языка С и языка С++. Как видно из примера, выполнение любых действий со строками старого стиля менее наглядно. Кроме того, необходимо проверять, достаточно ли места в строке-приемнике при копировании, то есть фактически код работы со строками старого стиля должен быть еще более длинным.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.)