C语言菜鸟:如何用指针生成回文数组?

我有一个char *s="abcdefg"
然后有char *w;
问题要求我不能用字符数组,只能用指针,让printf("%s",w)的结果是gfedcba也就是回文。求教啊,不会啊!

所谓回文数组,就是从高到底和从低到高遍历,得到的是相同序列。该数组具有对称性。

如果一个数组不是回文数组,可以把对称位置上值不相等的元素修改为相等,来生成回文数组。

用指针可以按照如下思路:

1 定义两个指针head和end,head指向数组头,end指向数组尾。

2 比较两个指针指向的值,如果不相等,则令其相等。

3 移动指针,head向后,end向前,即两头向中间凑。

4 重复执行2-3步,直到两个指针相等或者end在head前(end <= head),结束循环。

5 得到的数组即为回文数组。


参考代码如下:

#include <stdio.h>
int main()
{
    int a[5] = {1,2,4,3,1};//原始数组,不是回文数组。
    int i;
    int *head, *end;//定义两个指针。
    head = a;//head指向头。
    end = &a[4]; //end指向尾。
    
    while(head > end)//循环条件设置为head>end,即当end<=head时退出循环。
    {
        if(*head != *end) *end = *head; //如果不等,则使其相等。
    }
    
    for(i = 0; i < 5; i ++)//输出结果
        printf("%d ", a[i]);
        
    return 0;
}

执行后的结果为:

1 2 4 2 1

已经是回文数组了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-24
#include<stdio.h>
#include<string.h>
char fun(char *str){
char *p1=str,*p2=&str(strlen(str)-1),*t;//p1指针指向字符串起始,p2指向字符串末尾。 while(p1<p2){
t=p1;//交换
p1=p2;
p2=t;
p1++;//起始指针向后移
p2--;//末尾指针向前移
}
return str;
}
void main(){
char str[20];
printf("请输入字符串:");
scanf("%s",str);
str=fun(str);//调用函数
printf("生成的回文为:%s",str);
}
如果你不需要函数的话你可以不函数的代码放到主函数中来。稍微该一下。本回答被提问者采纳
第2个回答  2012-02-24
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char * s = "abcdefg";
char * w;
int i, j;

w = (char *)malloc(strlen(s) + 1);
if (!w) return 0;
for (i = strlen(s) - 1, j = 0; i >= 0; i--, j++)
w[j] = s[i];
w[j] = '\0';
printf("%s", w);
free(w);
return 0;
}
第3个回答  2012-02-24
用两个指针就可以了
相似回答