Re: Правильно ли я выполняю задания?
От: Balsamo Россия  
Дата: 11.10.05 09:15
Оценка:
Здравствуйте, 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;
}


Если что, спрашивай.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.