| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1580 人关注过本帖
标题:请高手帮忙解决,有点难!“回文问题”,要用指针来完成的!请看!
只看楼主 加入收藏
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
 问题点数:0 回复次数:10 
请高手帮忙解决,有点难!“回文问题”,要用指针来完成的!请看!
大家好,有关回文的程序想必很多了,但有谁能用?:?(表达式)来完成的。如要输出12321,则公式如下:n=n>3?6-n:n;很简练的。但如今要用指针来完成,出了问题,原程序如下:请各位指点为:
  main()
{ int i;
char s[6]={"abcde"},*p,*p2;
p=s; p2=s+5;
for(i=0;i<5;i++,p++)
{
  p=(p-s>2)?(p2-i-1):p;
  printf("%c",*p);
  }
  getch();
  }
  我的原意是要输出 :abcba;但实际上却输出:abcbc;
 请修改,谢谢!

[此贴子已经被作者于2005-1-27 16:18:36编辑过]


搜索更多相关主题的帖子: 回文 指针 
2005-01-27 12:02
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
收藏
得分:0 
原公式就错了吧,应该是
n=i>3?6-i:i;
才对。

Have you visit acm.tongji. lately?
2005-01-27 13:22
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
得分:0 
原公式没错,再说了,这个错也不是最要命的。我的原意是用指针来指向数组的各元素地址,然后利用 i>3?6-i:i;来取元素,这样一来,第一个元素与5个元素是相同,同理第二个与第4个。这样我们只要修改3及6,就可以轻易显示出回文来了。不知你明白了吧,若可行的话,帮我修改一下,谢谢!
2005-01-27 15:23
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
收藏
得分:0 
-___-|||我觉得我明白了...

注意你的公式:n=n>3?6-n:n
这里只有1个变量n控制他自己的值的变化。所以当n为2时,如果得到3,那么每次n为2时都将要得到3。不可能前一次得到3而后一次得到1。对n>3来说是没有办法区别是否是前一次n为2。所以应该得到 1 2 3 2 3。
用这个公式改写成指针这种方式所得到的结果(如果改写过程没错的话)也应该得到类似的结果(也就是你的"abcbc").

请你先确认你的公式正确,再修改程序吧:)

Have you visit acm.tongji. lately?
2005-01-27 17:37
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

main() { char String[100],*ptr; int n,i;

scanf("%s",String); for(;;) { scanf("%d",&n); ptr=String;

for(i=0;i<n;i++) { printf("%c",*ptr);

ptr= i<n/2?ptr+1-!(n%2)*!((i+1)*2-n):ptr-1;

} } }


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-01-27 20:13
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
得分:0 
int main()
{
    int i;
    char s[3]={"abc"},*p=s;
    for(i=0;i&lt;5;printf("%c",*(p+(i&gt;2?4-i:i))),i++);
    return 0;
}

[此贴子已经被作者于2005-1-27 21:47:44编辑过]



2005-01-27 21:36
kaikai
Rank: 1
等 级:新手上路
帖 子:236
专家分:0
注 册:2005-1-7
收藏
得分:0 
@三少爷,貌似改用指针用得很无奈的样子...

Have you visit acm.tongji. lately?
2005-01-28 12:23
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

又看了一下,有个地方更正一下: main() { char String[100],*ptr; int n,i;

scanf("%s",String); for(;;) { scanf("%d",&n); ptr=String;

for(i=0;i<n;i++) { printf("%c",*ptr);

ptr= i<n/2?ptr+1-!((i+1)*2-n):ptr-1; // !(n%2) 是多余的

} printf("\n"); } }


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-01-28 14:47
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
得分:0 

我把“三少爷”的程序稍做修改就可以在Win-Tc中正确显示了,看来思路还是对的,且只要公式对,就可行了。同时谢谢各位的分析。

main() { int i; char s[6]={"abcde"},*p=s; for(i=0;i<5;i++) printf("%c",*(p+(i>2?4-i:i))); getch(); }

2005-02-02 16:02
lmr
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2004-12-9
收藏
得分:0 
请kaikai就我写的程序与“三少爷”程序,特别是*(p+(i&gt;2?4-i:i))与我的 p=(p-s&gt;2)?(p2-i-1):p再做一次分析吧。
2005-02-02 16:11
快速回复:请高手帮忙解决,有点难!“回文问题”,要用指针来完成的!请看!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015810 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved