Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_C++ / Lesson3 / 1-strings / strings

.cpp
Скачиваний:
48
Добавлен:
10.02.2015
Размер:
2.42 Кб
Скачать
// Упражнение на работу со строками
// --------------------------------
// Требуется написать несколько функций для работы со строками C
// и тестовую программу, иллюстрирующую их работу.
// Заготовки для функций с пояснениями, что они должны делать
// приведены ниже.

#include <stddef.h> // В этом заголовочном файле определено значение NULL
#include <iostream>
using namespace std;
// Функция my_strlen должна возвращать длину строки, указатель
// на начало которой передается в нее в качестве параметра.
// Длина строки определяется как число отличных от нуля 
// последовательных символов начиная с символа, адресуемого 
// указателем - аргументом функции.
int my_strlen(char *s)
{
  int i=0;;
  while (s[i]!=0)
  {
     i++;
  }
  return i;
}

// Функция my_strcpy должна копировать строку, начинающуюся
// с позиции, адресуемой указателем source (2-м параметром),
// в область памяти, начинающуюся с позиции, адресуемой указателем
// target (1-м параметром). Возвращать функция должна указатель
// на позицию, в которую осуществляется копирование.
char *my_strcpy(char *target, char *source)
{
  int i=0;
  while (source[i]!=0)
  {  
    *(target+i)=source[i];
	i++;
  }
  return target;
}

// Функция my_strstr должна осуществлять поиск подстроки, задаваемой
// указателем pattern (2-м параметром)в строке, задаваемой указателем
// string (1-м параметром). Должна возвращать указатель на позицию,
// соотвтствующую первому появлению подстроки pattern в строке string.
// В случае, если заданная подстрока в строке не обнаруживается,
// должно возвращаться значение NULL.
char *my_strstr(char *string, char *pattern)
{
  int sum;
  char* result=NULL;
  bool flag=true;
  int i=0;
  while((string[i]!=0) && (flag))
  {
        sum=0;  
	    for(int j=0;j<my_strlen(pattern);++j)
		{
	       if (string[i+j]==pattern[j]) sum+=1;	
		   if ((sum==my_strlen(pattern)) && (flag))
		   {
		      result=&string[i+j-my_strlen(pattern)+1];
			  flag=false;
		   }
		}
	i++;	
  }
  return result;
}

// Функция main() должна проиллюстрировать работу написанных функций
int main()
{
  char a=NULL;
  char* target1=&a; 
  char string1[20]="Shipitko Oleg";
  char string2[30]="i like dogs.dogs like me.";
  char string3[20]="dogs";
  cout<<my_strlen(string1)<<endl<<my_strcpy(string1,target1)<<endl<<my_strstr(string2,string3);
  return 0;
}