Здравствуйте, Deposit, Вы писали:
D>Работаю над контрольными по С++.
D>В задании сказано отладить следующие программы:
D>И можно ли все эти функции реализовать в одном проекте?
Все эти функции можно реализовывать в одном проекте, даже больше, их лучше выполнить в виде отдельной библиотеке, если потом есть необходимость в их использовании.
Вопрос "Зачем писать свои функции, когда есть уже реализованные?", не задаю.
Пример 1.
Тут есть небольшая ошибка, в результате выполнения strlen() ты потеряешь указатель на строку. Его, конечно, можно вернуть назад, но все же лучше сделать так:
unsigned int strlen(char *cSource)
{
char *cBuf = cSource;
int iLength = 0;
while(*cBuf++) iLength++;
return iLength;
};
Пример 2.
Здесь таже ошибка что и во втором, только еще не учитывается последенее слово, если после него не идет пробел.
Я бы переписал ее так:
unsigned int SizeWord(char *cSource)
{
char *cBuf = cSource;
unsigned int iSize = 0;
while(*cBuf ==' ') cBuf++;
while(*cBuf)
{
if(*cBuf ==' ')
{
iSize++;
while(*cBuf==' ') cBuf++;
}
else cBuf++;
}
if (*--cBuf != ' ') iSize++;
return iSize;
}
Пример 3.
Судя по коду, ты просто проверяешь, идентичны ли они или нет, тогда:
1. Та же ошибка, что и в первых двух примерах.
2. Ты не проверяешь длину строк, если вторая будет больше первой, а первая входит во вторую в самом начале, то получится, что строки равны.
Моя реализация примерно такая:
bool strcmp1(char *cSource1, char *cSource2)
{
if (strlen(cSource1) != strlen(cSource2)) return false; //реализация strlen была описана ранее
char *cBuf1 = cSource1;
char *cBuf2 = cSource2;
while(*cBuf1)
{
if(*cBuf1++ != *cBuf2++) return false;
}
return true;
}
Пример 4.
Без комментариев...
int strcmp2(char *cSource1, char *cSource2)
{
unsigned int iSize1 = strlen(cSource1);
unsigned int iSize2 = strlen(cSource2);
if (iSize1 > iSize2) return +1;
if (iSize1 < iSize2) return -1;
char *cBuf1 = cSource1;
char *cBuf2 = cSource2;
while(*cBuf1)
{
if (*cBuf1 > *cBuf2) return +1;
if (*cBuf1 < *cBuf2) return -1;
*cBuf1++;
*cBuf2++;
};
return 0;
}
Если что, спрашивай.