1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Помогите пожалуйста! мне сама программа не нужна, она отлажена и работает на "ура", а вот коменты я не наю какие можно написать(( помогите плизз, с описание программы! И если не затруднит, можно поподробнее...
Само задание вот: Написать функцию которая удаляет с заданного стринга С1 все вхождения стринга С2 при помощи указателя А вот и сама программа:
#include "stdafx.h" #include "iostream"
int strremove(char *str1, char *str2);
using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char str1[255]; char str2[255];
#include "stdafx.h" //заголовочный файл, включает все самые распространенные заголовочные файлы MFC #include "iostream" //стандартный заголовочный файл библиотеки ввода/вывода
int strremove(char *str1, char *str2); //прототип функции strremove()
using namespace std; int _tmain(int argc, _TCHAR* argv[]) //передача параметров в главную функцию через командную строку { char str1[255]; //заводим строковую переменную str1 char str2[255]; //заводим строковую переменную str2
cout<<"VveDuTE CTPOKy:"; //ввод первой строки cin>>str1; //считывание первой строки в переменную str1 cout<<"VvEDuTe noDCTPOKy:";//ввод второй строки cin>>str2;//считывание второй строки в переменную str2
if (strremove(str1, str2) > 0) //значения строк str1 и str2 отправляются в функцию //если возвращаемое функцией значение больше 0, то { cout<<str1<<endl; //происходит вывод первой строки на терминал } else //иначе { cout<<"Not found"<<endl; //вывод на терминал сообщения о том //что вхождение второй строки в первую не было найдено } return 0; }
int strremove(char *str1,char *str2) //функция, вычисляющая вхождение строки 2 в строку 1 { int count=0; //объявление переменных int n=0; char *s1,*s2,*st1,*st2; //объявление указателей на переменные st1=str1; //st1 указывает на первый элемент str1 st2=str2; //st2 указывает на первый элемент str2 if (strlen(str1)<strlen(str2)) //если длина первой строки меньше длины второй строки { return 0; //то возвращаем ноль }
{while (*(str1)) //крутим цикл пока (while) не конец строки { count = 0; s1=str1; s2=str2; while (*s1++==*s2++) //сдвигаем указатели s1 и s2 вправо на одну позицию { count++; //увеличиваем счетчик } //пока s1=s2 if (count>=strlen(st2)) //если count больше или равно длине строки st2 { strcpy(st1+strlen(st1)-strlen(str1),str1+strlen(str2)); //происходит копирование n++; } str1++; //сдвигаем указатель str1 вправо на одну позицию }
str1 = st1; return n; //возвращаем значение переменной n }
Надеюсь ,мои комментарии помогут тебе разобраться в алгоритме программы. Но с тем, что программа работает на "ура" я не согласна потому что на ввод mama ma программа выдает ma а на ввод mamapa ma программа выдает mapa Отсюда вывод: программа удаляет не ВСЕ вхождения как сказано в условии. Наверное надо поработать вот над этой строчкой strcpy(st1+strlen(st1)-strlen(str1),str1+strlen(str2));