【问题标题】:Simplest way to count the rows and columns in a matrix计算矩阵中的行和列的最简单方法
【发布时间】:2014-02-27 17:26:15
【问题描述】:

好的,所以我用 C 而不是 C++ 制作生活游戏,因为我们不允许使用字符串库,我只是想知道如何计算任意输入文件的行和列..

是的,这是一项家庭作业,但这只是一个开始……我被困住了,感觉自己像个白痴。

这是一个例子:

00000000100000001010
00000000010000001001
11100000010100000010
10100100101010101010
00101010010010101000

所以我需要一种简单的方法来计算任意文件中的行和列,我想你会逐个字符地计算列,逐行计算行,但每次我尝试这样的事情时它都会搞砸。

所以请帮我解决这个问题,谢谢!

【问题讨论】:

  • @RikayanBandyopadhyay 老实说只是不知道如何在不使用字符串的情况下真正做到这一点..
  • @MattRay 你之前已经发布过两次基本相同的问题,甚至是accepted one of the answers。之前不使用stringshameless plug : ))的答案有什么问题?您不了解或需要帮助的地方是什么?
  • 哦,哇,我不知道我怎么没看到……对不起。我刚刚从另一个问题中实现了他,它工作正常......我的坏@jerry
  • @MattRay 抱歉,我完全误读了您的第一行,并错过了这个问题被标记为 C 的事实。两个链接的答案都是 C++(因为问题是这样标记的)。因此,这并不是真正的重复。

标签: c dynamic file-io multidimensional-array


【解决方案1】:

您需要在 c 中正确执行此操作。好的,首先使用某种方法计算每行中的字符数。设 len1 为行长。然后使用

fseek(fp, 0, SEEK_END);
len2 = ftell(fp);

那么 len2=len2/(len1+1)。将 1 添加到 len1 以考虑每行末尾的换行符和最后一行的 EOF。那么矩阵大小为(len1,len2)

【讨论】:

  • 请注意,行尾字符实际上可能是两个字符(在 Windows 系统上),因此您需要考虑这一点。此外,它假定一个文件根本没有多余的空格。
  • @ysap ok.t​​hen for windows 需要将计算更改为 len2=(len2-1)/(len1+1) 如果 EOF 为 2 个字节。
  • 其实是EOL,不是EOF,就是2个字节,所以大概len2/(len1-2)。当然,这也假定在最后一行的末尾有一个换行符。
  • @ysap 是我的阅读错误。是的,它应该是 len2=(len2+1)/(len1),最后一行是 EOF,最后一行是换行符 (len2-1)/len1。
【解决方案2】:

这样的东西应该可以工作

char *matrix; // this is our matrix read in from file

int rows = 0;
int cols = 0;
int tempCols = 0;
int index = 0;

// assumes matrix is a null-terminated string
while (matrix[index] != 0) {
    tempCols++;
    if (matrix[index] == '\n') {
        rows++;
        if (tempCols > cols) {
            // this will return the largest column size if it's not rectangular
            cols = tempCols;
            tempCols = 0;
    }

【讨论】:

    【解决方案3】:
    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char const *argv[])
    {
        FILE *fp;
        int row = 0, col = 0;
        char c;
        fp = fopen("file","r+");
        while( (c = fgetc(fp)) != EOF ){
            if(c != '\n' && row == 0){
                col++;
            }
            else if(c == '\n')
                row++;
        }
        row++;  /* If your file doesn't end with a \n */
        printf("Rows = %d\tColumns = %d\n",row,col);
        return 0;
    }
    

    这里的“file”是您输入的任意输入文件的名称。
    注意:此代码只有在文件末尾没有“enter”时才能正常工作。

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 2021-02-11
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2019-05-23
      • 2012-08-25
      相关资源
      最近更新 更多