The most efficient way to swap strings is to point at them, and swap the pointers. Swapping the actual strings is problematic if the strings are of unequal length but impossible when they are also statically allocated. Dynamic strings can always be physically swapped, however it's highly inefficient. If it really must be done, then use a built-in method such as string::swap(). Otherwise just use string pointers and swap the pointers, never the strings themselves.
The following example shows how both techniques can be used on statically allocated strings. Example output is show below.
#include <iOStream>
using namespace std;
void SwapPointers(char pp1, char pp2 )
{
cout<<"\nSwapping pointers:"<<endl;
char * t = *pp1;
*pp1 = *pp2;
*pp2 = t;
}
void SwapStatics(char * String1, char * String2, size_t len)
{
cout<<"\nSwapping static strings:"<<endl;
while(len--) String1[len]^=String2[len]^=String1[len]^=String2[len];
}
int main()
{
char s1[] = "one ";
char s2[] = "two ";
char s3[] = "three ";
// Note that the output statements before and after
// swapping are exactly the same, proving the strings
// have really swapped.
cout<<"Original strings:"<<endl;
cout<<s1<<s2<<s3<<endl;
SwapStatics(s1,s2,sizeof(s1));
cout<<s1<<s2<<s3<<endl;
cout<<endl;
// We cannot swap s3 with either s1 or s2, because
// s1 and s2 don't have the space to accomodate s3.
// However, we can use pointers instead:
char * p1 = s1;
char * p2 = s2;
char * p3 = s3;
// Again, note that the output statements are the
// same before and after swapping, proving the
// pointers have swapped.
cout<<"Original pointers:"<<endl;
cout<<p1<<p2<<p3<<endl;
SwapPointers(&p1,&p3);
cout<<p1<<p2<<p3<<endl;
cout<<endl;
// Just to prove the strings didn't swap...
cout<<"The strings have not swapped:"<<endl;
cout<<s1<<s2<<s3<<endl;
cout<<endl;
return(0);
}
Output:
Original strings:
one two three
Swapping static strings:
two one three
Original pointers:
two one three
Swapping pointers:
three one two
The strings have not swapped:
two one three
Copyright © 2026 eLLeNow.com All Rights Reserved.