用指针实现字符串的反序存放

简洁,多种方法,要用TC进行设计!要求用指针,但不要用函数!简洁,易懂!要有从键盘上输入!... 简洁,多种方法,要用TC进行设计!
要求用指针,但不要用函数!简洁,易懂! 要有从键盘上输入!
展开
 我来答
zybzyb1987
2010-06-20 · TA获得超过770个赞
知道答主
回答量:127
采纳率:0%
帮助的人:190万
展开全部
算法分析:
1、效果实例:“abcde”->“edcba”
2、仔细观察实例,我们会发现,要实现字符串的反序存放,只需将字符与其对称的另外一个字符交换即可,依次交换至对称中心(对称中心不交换)。比如实例中就是以字符c为中心,那么显然a和e,b和d都是相互对称的字符,只要交换它们位置即可,c位置不变。
那么,如果是偶数个字符的话,可以分为左右相等个数字符的字符串,对称中心以中线为界即可。
程序如下:
main()
{
char str[9]="abcdefghi";
char c;
int i=0;
for(i=0;i<=3;i++)
{
c=str[i];
str[i]=str[9-i];/*如果字符串的长度为L,那么第i个字符与第L-i个字符恒为对称*/
str[9-i]=c;
}
/*交换完毕*/
}
打印程序这里就不多复述,程序过长,让人眼皮累。
raef_beyond
推荐于2016-04-15 · TA获得超过1651个赞
知道小有建树答主
回答量:382
采纳率:50%
帮助的人:247万
展开全部
看哥哥我的.仅供参考!

法1: (重新分配空间, 再倒序存放,浪费空间,不好)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char str[] = "hello world";
char *ptr = NULL;
char *p = (char *)malloc(50 * sizeof(char));
char *tmp = p;
int len = 0;

len = strlen(str);
ptr = &str[len - 1];
while (len-- != 0)
{
*tmp++ = *ptr--;
}
*tmp = '\0';
printf("p = %s\n", p);
free(p);

return 0;

}

法2:(开头字符跟结尾字符交换,往中间压缩循环)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char str[] = "hello world";
char *start = str;
int len = 0, tmp = 0;

len = strlen(str);
while (len >= 1)
{
tmp = *start;
*start = *(start + len - 1);
*(start + len - 1) = tmp;
start++;
len -= 2;
}
printf("str = %s\n", str);

return 0;
}

法3:(同法2)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char str[] = "hello world";
int len = strlen(str);
char *start = str;
char *end = str + len - 1;
int tmp = 0;

while (start - end <= 0)
{
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
printf("str = %s\n", str);

return 0;

}

法2和法3类似.比法1好.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-06-19
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char str[] = "hello world";
char *ptr = NULL;
char *p = (char *)malloc(50 * sizeof(char));
char *tmp = p;
int len = 0;

len = strlen(str);
ptr = &str[len - 1];
while (len-- != 0)
{
*tmp++ = *ptr--;
}
*tmp = '\0';
printf("p = %s\n", p);
free(p);

return 0;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式