КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример программы для задачи с текстовыми даннымиИсходным текстом является предложение, заканчивающееся точкой. Слова в предложении отделяются друг от друга одним пробелом. Определить самое длинное слово в предложении. #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; } Не надо искать смысл в написанных программах. Они написаны только для того, чтобы сравнить запись одних и тех же действий, средствами языка С и языка С++. Как видно из примера, выполнение любых действий со строками старого стиля менее наглядно. Кроме того, необходимо проверять, достаточно ли места в строке-приемнике при копировании, то есть фактически код работы со строками старого стиля должен быть еще более длинным.
|