Почему так происходит?
{
char x='c';
char* q=&x;
//не знаю как по-нормальному инициализировать
int len=strlen(p);
for (int i=len,j=0;i>-1;i--,j++)
{
*(q+j)=*(p+i-1);
};
return q;
}
char* cat(char* p,const char* q)
{
char len=strlen(p);
for (int i=0;i<strlen(p);i++){
if (strlen(q)!=i) *(p+i+len)=*(q + i);
};
return p;
}
Собственно cat & rev - аналоги (по результату) функций из string.h, но почему cat работает нормально, а rev возвращает какую-то ерунду?
{
char x='c';
char* q=&x;
//не знаю как по-нормальному инициализировать
int len=strlen(p);
for (int i=len,j=0;i>-1;i--,j++)
{
*(q+j)=*(p+i-1);
};
return q;
}
Собственно cat & rev - аналоги (по результату) функций из string.h, но почему cat работает нормально, а rev возвращает какую-то ерунду?
Еще бы, ты же ее записываешь неведомо куда, а затем возвращаешь локальную переменную. Надо так:
char* rev(char* s)
{
char* p=s;
char* p1=s;
//не знаю как по-нормальному инициализировать
int len=strlen(p);
p1+=len;
for (int i=0;i<len/2;i++)
{
char h=*p;
*p=*p1;
*p1=h;
p++;
p1--;
};
return s;
}
Еще бы, ты же ее записываешь неведомо куда, а затем возвращаешь локальную переменную. Надо так:
char* rev(char* s)
{
char* p=s;
char* p1=s;
//не знаю как по-нормальному инициализировать
int len=strlen(p);
p1+=len;
for (int i=0;i<len/2;i++)
{
char h=*p;
*p=*p1;
*p1=h;
p++;
p1--;
};
return s;
}
Сдается мне, что твой вариант работает неверно. :о)
Сдается мне, что твой вариант работает неверно. :о)
Green прав. тогда уж так:
char* rev(char* s)
{
char* p=s;
char* p1=s;
//не знаю как по-нормальному инициализировать
int len=strlen(p);
p1+=len-1;//здесь была ошибка
for (int i=0;i<len/2;i++)
{
char h=*p;
*p=*p1;
*p1=h;
p++;
p1--;
};
return s;
}
{
char* forwardIterator = str;
char* reverseIterator = str + strlen(str) - 1;
while(forwardIterator < reverseIterator)
{
forwardIterator ^= reverseIterator;
reverseIterator ^= forwardIterator;
forwardIterator ^= reverseIterator;
forwardIterator++;
reverseIterator--;
}
return str;
}
Тогда уж давайте причешем этот лохматый код:
{
char* forwardIterator = str;
char* reverseIterator = str + strlen(str) - 1;
while(forwardIterator < reverseIterator)
{
forwardIterator ^= reverseIterator;
reverseIterator ^= forwardIterator;
forwardIterator ^= reverseIterator;
forwardIterator++;
reverseIterator--;
}
return str;
}
Тогда уж давайте исправим код, чтоб он был не только красивым, но и компилировался бы, и вместо переставления адресов, переставлял бы буквы слова:
{
char* forwardIterator = str;
char* reverseIterator = str + strlen(str) - 1;
while(forwardIterator < reverseIterator)
{
*forwardIterator = *forwardIterator^*reverseIterator;
*reverseIterator = *forwardIterator^*reverseIterator;
*forwardIterator = *forwardIterator^*reverseIterator;
forwardIterator++;
reverseIterator--;
}
return str;
}
Только вот, скажи на кой нужны такие динозавры:
*forwardIterator = *forwardIterator^*reverseIterator;
Мы же не на бейсике пишем.
*forwardIterator ^= *reverseIterator;
Ок, согласен, я очепятался. Не написал звездочек.
Только вот, скажи на кой нужны такие динозавры:
*forwardIterator = *forwardIterator^*reverseIterator;
Мы же не на бейсике пишем.
*forwardIterator ^= *reverseIterator;
Ты прав. Но я только расскрыл операторы, чтоб посчитать, что ради красоты насколько больше операций выполняется, чем это необходимо. А потом, забыл "закрыть" операторы.