【问题标题】:unique element/s for array in every row每行中数组的唯一元素
【发布时间】:2016-11-19 14:48:42
【问题描述】:

我有一个关于如何在数组中显示唯一元素的问题。该程序由两个嵌套循环组成。第一个计数器用于行,另一个用于字母,第二个计数器按顺序输出数组中的字母。

我遇到的问题是,在第一行和第二行之后,一些元素开始重复自己(C prime plus 6th edition 241pg num 4)

#include <stdio.h>

    int main(void){

    char lets[29] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";


    for(int i =0; i<6; i++)
    {
        for(int j=0; j<=i; j++)
        {
            printf("%c", lets[j+i]);
        }


        printf("\n");
    }
    }

我的输出

A
BC
CDE
DEFG
EFGHI
FGHIJK

需要的输出

A
BC
DEF
GHIJ
KLMNO
PQRSTU

【问题讨论】:

  • 不要发布文字图片。不清楚你的意思。有一个一维数组,数组中只有列/条目。

标签: c arrays


【解决方案1】:

你需要一个额外的偏移量,否则你永远不会到达字母表的末尾:

char lets[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // no need to give array size, automatic size is OK

int start = 0;

for(int i =0; i<6; i++)
{
    for(int j=0; j<=i; j++)
    {
        printf("%c", lets[j+i+start]);
    }
    start += i;  # shift letters

    printf("\n");
}

结果:

A
BC
DEF
GHIJ
KLMNO
PQRSTU

【讨论】:

    【解决方案2】:

    试试这个:

    #include <stdio.h>
    
    int main(void){
    
    char lets[29] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    int k=0;
    for(int i =0; i<6; i++)
    {
        for(int j=0; j<=i; j++)
        {
            printf("%c", lets[k]);
            k++;
        }
    
    
        printf("\n");
    }
    }
    

    输出:

    A
    BC
    DEF
    GHIJ
    KLMNO
    PQRSTU
    

    【讨论】:

      【解决方案3】:

      对于初学者,您将数组 lets 声明为具有 29 个元素,但仅使用 27 个元素显式初始化它,包括终止零。

      char lets[29] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
               ^^^
      

      其次,不清楚你为什么要使用这个神奇的数字6

      for(int i =0; i<6; i++)
                    ^^^
      

      如果您使用另一个字母,您的代码将无效。

      考虑到您应该检查当前输出的符号是否在终止零之外。

      程序可以如下所示

      #include <stdio.h>
      
      int main(void) 
      {
          char lets[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      
          for ( size_t i = 0, j = 0; lets[j]; i++ )
          {
              for ( size_t k = i + 1; lets[j] && k; --k ) putchar( lets[j++] );
              putchar( '\n' );
          }
      
          return 0;
      }
      

      它的输出是

      A
      BC
      DEF
      GHIJ
      KLMNO
      PQRSTU
      VWXYZ
      

      它的工作不依赖于字符数组的大小。它适用于任何字母。

      举个例子

      #include <stdio.h>
      
      int main(void) 
      {
          char lets[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      
          for ( size_t i = 0, j = 0; lets[j]; i++ )
          {
              for ( size_t k = i + 1; lets[j] && k; --k ) putchar( lets[j++] );
              putchar( '\n' );
          }
      
          return 0;
      }
      

      在这种情况下,输出将如下所示

      A
      BC
      DEF
      GHIJ
      KLMNO
      PQRSTU
      VWXYZab
      cdefghij
      klmnopqrs
      tuvwxyz
      

      【讨论】:

        猜你喜欢
        • 2021-03-15
        • 2015-07-26
        • 1970-01-01
        • 2015-03-07
        • 1970-01-01
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多