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