IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Коменты для программы в Visual Си++...помогите плз, Удивительно, но...
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Ваня

Репутация: -  0  +


Помогите пожалуйста!
мне сама программа не нужна, она отлажена и работает на "ура", а вот коменты я не наю какие можно написать(( помогите плизз, с описание программы! И если не затруднит, можно поподробнее...

Само задание вот:
Написать функцию которая удаляет с заданного стринга С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;
}

Помогите пожалуйста с коментами...!

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Влюблённый псих
***

Группа: Пользователи
Сообщений: 185
Пол: Женский
Реальное имя: Лейла

Репутация: -  1  +


Я бы сделала так:
#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));

Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Рискну вмешаться.
Возможно, такие комментарии и могут помочь выяснить, какой оператор Си что делает, но вряд ли помогут выяснить, как работает программа.
ЧТО делается - это написано на самом языке программирования. Цель коментариев - соощить, ЗАЧЕМ это делается. Ну а заодно проверить, действительно ли делается именно то, что нужно.
Цитата(Тёмный Эльф @ 23.12.2007 1:26) *

...
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
}

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 3:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name