2015-06-01 青岛 张俊浩
《实现字符串数组字符串交换》分为三部分:
【1】论坛帖子
【2】代码思路
【3】代码、运行结果
(1)两个字符串等长正常交换即可;
(2)两个字符串不等长交换短字符串宽度的字符数据(包括结束符),拷贝长字符剩余字符到短字符串数据区(此时长字符串剩余数据还在内存只是被结束符’\0’分割)。
#include<stdio.h>
void swap(char *a,char *b)
{
char temp = -1;
do{
temp = *a;
*a = *b;
*b = temp;
++a;
++b;
}while(*a != '\0' && *b != '\0');//遇到两者之一结束时,终止交换
if(*a =='\0'){//此时结束符未交换位置,说明字符串a先结束,只把字符串b剩余部分拷贝到字符串a位置就好
temp = *a;
*a = *b;
*b = temp;//交换结束符
++a;
++b;
do{
*a++ = *b++;
}while(*b != '\0');//拷贝b剩余字符(结束符未拷贝)
*a = *b;//拷贝结束符
}
else{//此时结束符未交换位置,说明字符串b先结束,只把字符串a剩余部分拷贝到字符串b位置就好
temp = *b;
*b = *a;
*a = temp;//交换结束符
do{
*b++ = *a++;
}while(*a != '\0');//拷贝a剩余字符(结束符未拷贝)
*b = *a;//交换结束符
}
}
void main()
{
char a[][7]={"foo","bar","foobar"};
printf("old:%-6s\t%-6s\t%-6s\n",a[0],a[1],a[2]);
swap(a[0],a[2]);
printf("new:%-6s\t%-6s\t%-6s\n",a[0],a[1],a[2]);
} 原文地址:http://blog.csdn.net/yunfenglw/article/details/46300349