在C程序中反转字符串?

时间:2016-04-09 14:01:17

标签: c

我发现这个程序可以在线反转这个程序。

我刚刚开始学习C。

我无法理解这里的一些事情。

  1. 为什么while结束;
  2. while(str[++i]!='\0');是什么意思?
  3. {j}与编写j ++相同;和我 - ;在while循环中?
  4. 这是该计划:

    rev[j++] = str[--i];

8 个答案:

答案 0 :(得分:3)

    while(str[++i]!='\0');

相当于

    while(str[++i]!='\0')
       /*do nothing*/;

相当于

    ++i;
    while (str[i]!='\0') {
      ++i;
    }

    while(i>=0)
      rev[j++] = str[--i];

相当于

    while (i>=0) {
        --i;
        rev[j] = str[i];
        ++j;
    }

请注意,i在语句之前递减,因为--i是预递减,而j在语句之后递增,因为j++是后递增。

答案 1 :(得分:1)

  1. process_id可以关闭循环
    2:;表示"转到str的每个字符,直到到达while(str[++i]!='\0');字符"。\0是字符串的结束字符

    3:是

答案 2 :(得分:1)

我会尽力回答......

  
      
  1. 为什么while结束;
  2.   

这是有效的语法,它通常用于使程序在该行等待,直到在嵌入式方案中设置某个标志。在这种情况下,它用于查找字符串的长度。 所有字符串都以空字符结尾,即'\ 0',而i上的preincrement意味着在该行之后,我将保存字符串长度的值。 实际上它等同于:

/* If the ith position of the string is not the end */
 while (str[i] != '\0') {
     /* Increment i and repeat */
     i = i + 1;
}

这里的主要概念是后增量和前增量算子之间的区别 - 可能值得一读。

  
      
  1. while(str [++ i]!='\ 0');意思?
  2.   

见上文。

  

3.是rev [j ++] = str [ - i];和写j ++一样;和我 - ;在while循环中?

如果你问的是它是否在while循环中,它完全等同于:

while(i>=0) { rev[j++] = str[i--]; }

由于while循环中只有一个操作,因此不需要括号。 只是一个注释,这是完全主观的,但即使在这种情况下,我也会使用大多数编码标准。

您的问题似乎主要与C的语法有关 - 可能值得一本书出来或看一些教程来熟悉它。

答案 3 :(得分:0)

首先,while(str[++i]!='\0');递增i直到找到最后一个字符。在C中,所有字符串以\ 0或NULL结尾(两者都相同)。

第二个,没有。它与--i不同{。{1}}。

检查以下代码snipet:

i++

在执行结束时,a = 10但b = 9.这是因为--y是预减量。它首先递减值,然后将其值赋给b。

答案 4 :(得分:0)

这是该程序的注释版本:

// Include standard input output functions
#include<stdio.h>
// declares the main function. It accept an undefined number
// of parameters but it does not handles them, and returns an integer
int main(){
    // declares tho arrays of 50 characters initialized with random values
    char str[50];
    char rev[50];
    // declare and initialize two integer variables
    int i=-1,j=0;

    printf("Enter any string : ");
    scanf("%s",str);

    // executes the ';' instruction while the condition is satisfied.
    // ';' is an empty statement. Thus do nothing.
    // The only action executes here, is the increment of the i variable with
    // a preincrement. Because the i variable was initialized with
    // -1, the first control start checking if str[0] != '\0'
    // If the  post increment operator was used, the variable must
    // have been initialized with 0 to have the same behaviour.
    while(str[++i]!='\0');

    // at the end of the previous while, the i variable holds the
    // str lenght + 1 (including the '\0')

    // starting from the end (excluding the '\0', using the pre-decrement on the i variable)
    // assign to rev[j] the variable of str[i], then (post increment)
    // increment the j variable
    while(i>=0)
     rev[j++] = str[--i];

    // now j is equals to str lenth +1
    // therefore in this position add the null byte
    rev[j]='\0';

    // print result
    printf("Reverse of string is : %s",rev);

    // return 0 to the OS
    return 0;
}

答案 5 :(得分:0)

  1. ;表示 c中语句的结尾

    while(condition)
    {
        //do something
    }
    

    做某事意味着至少应该执行一条陈述。为此,此处使用;

  2. while(str[++i]!='\0'); '\0'表示字符串的结尾。这里循环终止于字符串的末尾,++i增加i

  3. 是rev [j ++] = str [ - i];和写j ++一样;和我 - ;在while循环中?
    是。但是,--i在执行i之前rev[j++] = str[--i]增加i--,因此rev[j] = str[i]应该在j++之前增加j rev[j++] = str[--i]在执行j++之后增加rev[j] = str[i] 1}}所以label:before应该在label:after

  4. 之后

答案 6 :(得分:0)

这里的关键是理解前缀(++i)和后缀(i--)运算符之间的行为差​​异。

前缀运算符将递增其操作数(i),然后计算为新值。

后缀运算符将计算其操作数当前值,然后递增操作数。

至于:

int i = -1;

while (str[++i] != '\0');

这是一个没有块的循环,因为所有语句都可以用条件表示。在每次迭代中:

  • i增加一个。
  • 获取位置char的{​​{1}}评估为。
  • i如果不是NUL角色。

当写成:

时,可能会更好地理解这一点
continue

此操作的结果是int i = -1; do { i++; } while (str[i] != '\0'); 现在保持字符串中NUL字符的位置,因为所有有效字符串必须以NUL字符结尾。

在程序的下一部分中,再次使用前缀运算符立即将字符 NUL字符前一个位置,然后在此之前的一个位置,依此类推,直到我们得到字符串的第一个字符,然后我们就完成了。

i

答案 7 :(得分:0)

  1. 为何结束:

    而(STR [++ I]!= '\ 0')

  2. 一旦str是一个asciiz字符串,它就会以'\ 0'字符结尾。因此,只要while到达字符串的末尾,它就会结束。

    1. 上面一行表示:
    2. =&GT; ++ i:在获取相应的字符之前递增字符串索引。

      =&GT;检查str [index]!='\ 0'//到达字符串的结尾

      在i结束时,i变量将包含字符串长度(不包括'\ 0'字符)。

      使用它会更容易:

      i = strlen(str);
      
      1. 是rev [j ++] = str [ - i];和写j ++一样;和我 - ;在while循环中?
      2. 没有

        这一行与:

        相同
        while(i>=0)
        {
            i = i - 1;
            rev[j] = str[i];
            j = j + 1;
        }
        

        - i:递减i后获取字符串字符。 如果你改为i--代码在递减i之前会得到str [i],但这不是你想要的。