Помогите пожалуйста!
мне сама программа не нужна, она отлажена и работает на "ура", а вот коменты я не наю какие можно написать(( помогите плизз, с описание программы! И если не затруднит, можно поподробнее...
Само задание вот:
Написать функцию которая удаляет с заданного стринга С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];
cout<<"VveDuTE CTPOKy:";
cin>>str1;
cout<<"VvEDuTe noDCTPOKy:";
cin>>str2;
if (strremove(str1, str2) > 0)
{
cout<<str1<<endl;
}
else
{
cout<<"Not found"<<endl;
}
return 0;
}
int strremove(char *str1,char *str2)
{
int count=0;
int n=0;
char *s1,*s2,*st1,*st2;
st1=str1;
st2=str2;
if (strlen(str1)<strlen(str2))
{
return 0;
}
while (*(str1))
{
count = 0;
s1=str1;
s2=str2;
while (*s1++==*s2++)
{
count++;
}
if (count>=strlen(st2))
{
strcpy(st1+strlen(st1)-strlen(str1),str1+strlen(str2));
n++;
}
str1++;
}
str1 = st1;
return n;
}
Я бы сделала так:
#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
}
Рискну вмешаться.
Возможно, такие комментарии и могут помочь выяснить, какой оператор Си что делает, но вряд ли помогут выяснить, как работает программа.
ЧТО делается - это написано на самом языке программирования. Цель коментариев - соощить, ЗАЧЕМ это делается. Ну а заодно проверить, действительно ли делается именно то, что нужно.
...
int strremove(char *str1, char *str2); //прототип функции strremove()
...
if (strremove(str1, str2) > 0) //значения строк str1 и str2 отправляются в функцию
//если возвращаемое функцией значение больше 0, то
...
int count=0; //объявление переменных
int n=0;
...
return n; //возвращаем значение переменной n
}
...
int strremove(char *str1, char *str2); //прототип функции, подсчитывающей количество вхождений str1 в str2
...
if (strremove(str1, str2) > 0) //вычисляется количество вхождений...
...
int count=0; // счетчик символов в строке
int n=0; // а сюда будем заносить количество найденных подстрок
...
return n; //возвращаем найденное количество подстрок str1 в строке str2
}