// ExampleCodes.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<iostream>
using namespace std;
char* stringReverse(char* s)
{
char temp, *p,*q;
q = s;
while( *(++q));
for( p = s; p < --q; p++)
{
temp = *p;
*p = *q;
*q = temp;
}
return s;
}
int _tmain(int argc, _TCHAR* argv[])
{
stringReverse("StringReverse");
return 0;
}
5 Answers
You never allocated any memory for p. You can try p = new char[sizeof(s)];
2 Comments
caf
p doesn't need its own memory - the function reverses a string in-place.Alexander Rafferty
Okay, my mistake. His function doesn't seem to make much sense to me. I think that it could be changed to be make more clear.
Perhaps you should write something like this:
// in - string to reverse
// out - buffer for reversed string
// l - size of in
StringReverse(char* in, char* out, int l) {
for (int i=0;i<l;i++) {
out[l-(i+1)] = in[i];
}
}
*There is very very little to no speed difference between [] and *(p++) / *(p--)
Comments
Well I was going to clean up the awful source in the OP but instead I'll just post a cleaner version:
#include <stdio.h>
#include <string.h>
void reverse_string(char *s)
{
char *q = s + strlen(s);
for (char *p = s; p < --q; p++)
{
char temp = *p;
*p = *q;
*q = temp;
}
}
int main()
{
char s[] = "StringReverse";
reverse_string(s);
puts(s);
return 0;
}
I hope for your sake Amit that you're still a student.
Update0
This is actually pure C, so learn from and awe at its performance but don't start writing C++ like this.
5 Comments
Dennis Zickefoose
I'm half tempted to downvote for "cleaning up" code, and then adding an xor hack.
greyfade
I'm half-tempted to downvote just for the xor hack. Unless you've got a benchmark showing that xor is universally faster than using a temporary, don't bother with it.
Matt Joiner
The xor stuff was just for kicks, I'll remove it.
sbi
Still, this is a C++ question. What's with
std::swap(*p,*q)? And in C++, those headers should be <cstdio> and <cstring>, and it's std::strlen().Matt Joiner
@sbi: Yeah that's true. Suddenly I don't feel like doing C++ (that was quick, I hadn't started yet) ;]
char [], which decays tochar *(this despite them being unmodifiable). This is because string literals pre-date theconstkeyword.