首页 > 应用开发 > C/C++ > 你会如何改进这个算法?
char * reverse(const char * str)
{
int length = strlen(str);
char * reversed_string = new char[length+1];
for(int i = 0; i < length; ++i)
{
reversed_string[i] = str[(length-1) - i];
}
//need to null terminate the string
reversed_string[length] = '\0';
return reversed_string;
}
int main(int argc, char * argv[])
{
char * rev_str = reverse("Testing");
cout << "Your string reversed is this: " << rev_str << endl;
delete rev_str;
rev_str = 0;
return 0;
}
上面的 for 循环有错字。检查循环变量 i 应该是 <= 而不是 <,否则对于奇数个元素将失败。for(int i = 0; i <= 长度/2; ++i)
char * reverse(const char * str)
{
if (!str)
return NULL;
int length = strlen(str);
char * reversed_string = new char[length+1];
for(int i = 0; i < length/2; ++i)
{
reversed_string[i] = str[(length-1) - i];
reversed_string[(length-1) - i] = str[i];
}
//need to null terminate the string
reversed_string[length] = '\0';
return reversed_string;
}
int length = strlen(string);for(int i = 0; i < length/2; i++) {string[i] ^= string[length - i] ^= string[i] ^= string[length - i];}
static inline voidbyteswap (char *a, char *b){*a = *a^*b;*b = *a^*b;*a = *a^*b;}voidreverse (char *string){char *end = string + strlen(string) - 1;while (string < end) {byteswap(string++, end--);}}
char* stringReverse(const char* sInput){std::size_t nLen = strlen(sInput);std::stack<char> charStack;for(std::size_t i = 0; i < nLen; ++i){charStack.push(sInput[i]);}char * result = new char[nLen + 1];std::size_t counter = 0;while (!charStack.empty()){result[counter++] = charStack.top();charStack.pop();}result[counter] = '\0';return result;}
原文链接: https://www.chaindev.cn/219420-how-would-you-improve-this-algorithm-c-string-reversal/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016198/viewspace-2885700/ ,如需转载,请注明出处,否则将追究法律责任。