none
倒序输出a-g这7个字符的问题 RRS feed

  • 问题

  • // 倒序字符a-g.cpp : 定义控制台应用程序的入口点。
    //abcdefg\0

    #include "stdafx.h"
    #include<iostream>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {int strlen1(char a[]);
     char s[]="abcdefg";
    char *p;
    int n=strlen1(s);
    cout<<"n="<<n<<endl;
    for(p=s+n-1;p+1!=s;p--)
    cout<<*p;
    cout<<endl;

     return 0;
    }
    int strlen1(char a[])
    {char *p=a;
    int i=0;
    while(a[i++]!='\0')
    p++;
    return p-a;
    }

    问题是for(p=s+n-1;p+1!=s;p--)老师在vc++6.0说n=8,可这里n=7

    for(p=s+n;p!=s;p--)还有为何这循环条件里p不能少了-1,不能少了+1,少时就输出括号里的错误值【 gfedcb】,360还杀毒报警?

    希望斑竹回答



    • 已编辑 h01123 2012年1月24日 14:15
    2012年1月24日 14:13

答案

  • for(p=s+n-1;p+1!=s;p--)
    cout<<*p;

     等于

    p=s+n-1;

    while(p+1!=s)

    {

    cout<<*p;
    p--;

    }


    麻烦把正确答案设为解答。
    • 已标记为答案 h01123 2012年1月26日 10:50
    2012年1月26日 8:44
    版主

全部回复

  • while(a[i++]!='\0')
    p++;
    这里的p指向的是'\0'

    p-a返回的是p和a的距离,所以从'a'到'\0'距离是7。

    由于for(p=s+n-1;p+1!=s;p--)

    这里面的p--是在循环内的语句执行后才执行的所以这里要-1, +1

    for(p=s+n;p!=s;)
    cout<<*--p;
    
    
    

    按上面的写法就不需要-1和+1了


    麻烦把正确答案设为解答。
    2012年1月26日 2:04
    版主
  • 斑竹们是如何学c++的,为何我总是容易有些学了后面忘记前面呢?

    另外能像老师那样讲讲  不需要-1和+1的代码执行的历程吗?从'\0'gf到ba的历程


    1:是因为我不清楚【这里面的p--是在循环内的语句执行后才执行的所以这里要-1, +1】时的历程,请逐一写一下吧谢谢

    主要是它的历程 p=s+n-1;p+1!=s; 为何不是p!=s

    2:for(p=s+n;p!=s;)
    cout<<*--p;这句的历程也不知道,写下两个历程吧。


    • 已编辑 h01123 2012年1月26日 7:52
    2012年1月26日 6:42
  • for(p=s+n-1;p+1!=s;p--)
    cout<<*p;

     等于

    p=s+n-1;

    while(p+1!=s)

    {

    cout<<*p;
    p--;

    }


    麻烦把正确答案设为解答。
    • 已标记为答案 h01123 2012年1月26日 10:50
    2012年1月26日 8:44
    版主