【问题标题】:How to save integers in array line by line and calculate unique integers如何逐行保存数组中的整数并计算唯一整数
【发布时间】:2016-04-30 04:01:01
【问题描述】:

我想计算每行唯一整数的数量。 我想要的输出是:

unique: 6
unique: 3
unique: 5
unique: 5
unique: 1
unique: 1
unique: 7

更新:

   fgets(line, sizeof(line), fp) ;

   int value;
   int index1 = 0;
   int count1;

   for(count = 0; sscanf( &line[index1], "%d%n", &value, &index1 ) == 1 ; count1++) {
    array[count1] = value ;
   }

  int last = sorted[0] ;
  int unique = 1 ;
  for( int i = 1; i < n; i++ ){
    if( sorted[n] != last ){
        last = sorted[n];
        unique++ ;
    }
  }
}


    fclose(fp);
    return 0;
}

那么可以用array[count] 代替sorted[0] 吗?我从哪里得到 n 的值?

因此,我想逐行读取文件,并计算每行唯一整数的数量(您在上面看到的输出)。我不想要硬编码的数组值,也不想要第一个唯一整数(我想要每行所有唯一整数)。有什么建议?请拜托,我好困

更新: 我进行了快速排序,可以按降序逐行获取值。我应用了唯一性算法,当我打印唯一性的值时,它始终是 2。

qsort(array, count, sizeof(int), int_cmp);
      int n;
      for (n=0; n<count; n++)
       printf ("sorted array:%d\n ", array[n]);

      int last = array[0] ;
      int unique = 1 ;
      int i;
      for( i = 1; i < n; i++ ){
        if(array[n] != last ){
        last = array[n] ;
        unique++;
       }
      }
    printf("unique:%d", unique);

输出:

sorted array:6
 sorted array:5
 sorted array:5
 sorted array:5
 sorted array:4
 sorted array:4
 sorted array:3
 sorted array:2
 sorted array:1
 unique:2
sorted array:62
 sorted array:48
 sorted array:14
 sorted array:14
 unique:2
sorted array:9
 sorted array:7
 sorted array:5
 sorted array:3
 sorted array:1
 unique:2
sorted array:5678
 sorted array:1234
 sorted array:789
 sorted array:456
 sorted array:123
 unique:2
sorted array:34
 sorted array:34
 sorted array:34
 sorted array:34
 sorted array:34
 unique:2
sorted array:1
 unique:1
sorted array:7
 sorted array:7
 sorted array:7
 sorted array:6
 sorted array:5
 sorted array:5
 sorted array:4
 sorted array:4
 sorted array:4
 sorted array:4
 sorted array:3
 sorted array:3
 sorted array:2
 sorted array:2
 sorted array:2
 sorted array:2
 sorted array:2
 sorted array:1
 sorted array:1
 sorted array:1
 unique:2

调试更新:

sorted array:6
 sorted array:5
 sorted array:5
 sorted array:5
 sorted array:4
 sorted array:4
 sorted array:3
 sorted array:2
 sorted array:1
 i:1
n:9
last:6
:unique:2
sorted array:62
 sorted array:48
 sorted array:14
 sorted array:14
 i:1
n:4
last:62
:unique:2
sorted array:9
 sorted array:7
 sorted array:5
 sorted array:3
 sorted array:1
 i:1
n:5
last:9
:unique:2
sorted array:5678
 sorted array:1234
 sorted array:789
 sorted array:456
 sorted array:123
 i:1
n:5
last:5678
:unique:2
sorted array:34
 sorted array:34
 sorted array:34
 sorted array:34
 sorted array:34
 i:1
n:5
last:34
:unique:2
sorted array:1
 unique:1
sorted array:7
 sorted array:7
 sorted array:7
 sorted array:6
 sorted array:5
 sorted array:5
 sorted array:4
 sorted array:4
 sorted array:4
 sorted array:4
 sorted array:3
 sorted array:3
 sorted array:2
 sorted array:2
 sorted array:2
 sorted array:2
 sorted array:2
 sorted array:1
 sorted array:1
 sorted array:1
 i:1
n:20
last:7
:unique:2

【问题讨论】:

  • 不加评论就投反对票是没有帮助的。这里有一个合理的问题,可能被一些多余的内容和不适当的标签所掩盖,但 cmets 的目的是帮助改进问题。
  • 仔细考虑你的标签;问题真的是关于文件 io 和数组吗?在我看来,您实际上正在寻找的是一个 algorithm - file-io 和数组似乎不是您的问题。
  • @Clifford 我不明白如何应用算法,因为我不明白如何将文件中的值逐行提取到数组中以执行算法。并感谢您的标签建议。
  • 我的答案现在涵盖了两者(尽管可能不再与问题匹配)。希望对您有所帮助。
  • 一般:注释你的代码(你开始(很好),但还有更多:靠近顶部,在 sn-p/file 中说明代码的用途。继续here)。在其第一个表达式中声明for-loops 的控制变量,并在一个块中本地声明临时变量作为循环体。如果您对变量是什么感到困惑,请选择富有表现力的名称。如果您不使用调试器来逐步执行,请添加日志记录或调试输出语句for-loop 中用于计算唯一值的迭代变量是什么,你用什么来索引?

标签: c arrays algorithm file-io


【解决方案1】:

将整数读入整数数组,对数组进行排序,然后扫描数组,每次值更改时递增“唯一”计数器。

所以输入:

           1 2 3 4 5 6 5 4 5`

排序:

           1 2 3 4 4 5 5 5 6 
unique=0   1 2 3 4   5     6

排序后的唯一计数迭代如下:

int last = sorted[0] ;
int unique = 1 ;
for( int i = 1; i < n; i++ )
{
    if( sorted[n] != last )
    {
        last = sorted[n] ;
        unique++ ;
    }
}

关于读取数据;我建议你阅读使用fgets() 的行,然后使用sscanf() 扫描行。

fgets( line, sizeof(line), fp ) ;

int value ;
int index = 0 ;
int count ;

for( count = 0; 
     sscanf( &line[index], "%d%n", &value, &index ) == 1 ;
     count++ ;
{
    array[count] = value ;
}

上述方法读取一行,然后同时验证并转换为整数。当遇到非数字值或行尾时,循环终止。对于空行或以非数字开头的行,count 将为零;否则就是转换后的整数总数。

【讨论】:

  • 好的。我无法将文件中的整数逐行读取到整数数组中。尝试将整数逐行添加到数组时,请查看我对正在打印的内容的编辑。
  • @Justin_Finland :您的问题文本明确指出:“我想逐行读取文件(完成)”,所以我自然认为那不是问题的一部分。不要让问题变得太大和多样化——问一个关于阅读文件的问题,另一个关于算法的问题。如果您将这些问题混为一谈,那么您可能会得到仅涵盖部分问题的好答案,或者涵盖所有问题的坏答案——在这种情况下,您会接受哪一个?
  • 对不起。我意识到那部分没有完成并且忘记更改该语句(更新删除了该语句和不必要的代码)。我只是不知道如何同时应用这两者。我已经看过使用整数数组排序但不是逐行从文件中获取该整数数组。
  • 问题标题是“计算每行唯一整数的数量”,但您似乎更关心数据输入。我强烈建议您将问题拆分为 tw(或更多),或者至少明确说明您想要答案的内容 - 也许使用摘要问题项目符号列表。
  • @Justin_Finland :您真的必须发布一个单独的问题;您现在在这里至少有三个问题。在事件之后添加问题会使所有现有答案不完整,这对那些做出努力的人是不公平的,了解如何使用 qsort 是一个完全不同的问题。我发布的链接包含一个对 int 数组进行排序的示例——这正是您所需要的。出于某种原因,您创建了一个 int* 数组,然后尝试对其进行排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2021-01-12
  • 2011-04-26
相关资源
最近更新 更多