注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
云峰 https://home.eeworld.com.cn/space-uid-544815.html [收藏] [复制] [分享] [RSS]
日志

实现字符串数组字符串交换

已有 1381 次阅读2015-6-1 09:56 |个人分类:C进阶| 字符串, 字符串交换, 内存数据交换

实现字符串数组中字符串交换

2015-06-01  青岛  张俊浩 

《实现字符串数组字符串交换》分为三部分:

1】论坛帖子

2】代码思路

3】代码、运行结果 


1.论坛帖子

                          


2.代码思路

(1)两个字符串等长正常交换即可;

(2)两个字符串不等长交换短字符串宽度的字符数据(包括结束符),拷贝长字符剩余字符到短字符串数据区(此时长字符串剩余数据还在内存只是被结束符\0分割)。

3.代码、运行结果

#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]);
}
             

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章