C/C++ - 将文件中的字符存储到 2d 字符数组中

C/C++ - Storing characters from file into a 2d char array

本文关键字:字符 存储 2d 数组 文件 C++      更新时间:2023-10-16

我正在尝试将文件中的字母字符存储在二维数组中,在我完成第一行的最后一个单词后,我想转到下一行并做同样的事情。(我假设我的文本中有 4 行)。

这是我的代码:

void getPoem(char *filePath){
    ifstream f(filePath);
    int NumberOfRows=0;
    int NumberOfColumns=-1;
    int NumberOfColumns_Clone=-1;
    char matrix[100][100]={0};
    char s[100];
    do{
        f.getline(s, 100, 'n');
        for(int i=strlen(s)-1;i>=0;i--)
            if(isalpha(s[i]))
            matrix[NumberOfRows][++NumberOfColumns]=s[i];
        matrix[NumberOfRows][++NumberOfColumns]=NULL;
        NumberOfColumns--;
        NumberOfColumns_Clone=NumberOfColumns;   // I used this so i don't lose the nr_of_columns
        NumberOfColumns=0;
        NumberOfRows++;
        matrix[NumberOfRows][NumberOfColumns]='';
    }
    while(NumberOfRows<4);
        for (int i = 0; i<=NumberOfRows; i++){
            for (int j = 0; j<=NumberOfColumns_Clone; j++)
                cout << matrix[i][j] << " ";
            cout << endl;
        }
        cout << endl;
    }
我的

输出很糟糕,当我打印它时,它会永远消失,我的程序会发出哔哔声。我知道这很糟糕,我只想知道我哪里做错了。

我不想使用"字符串",这就是我在"char"上挣扎的原因。

任何帮助将不胜感激。非常感谢!

NumberOfColumnsNumberOfColumns_Clone是循环中的简单变量:在循环结束时,您有上次迭代的值,并且所有先前的值都将丢失。

您可以 :

  • NumberOfColumns_Clone更改为数组并保持每行的大小

    int NumberOfColumns_Clone[100];
    ...
        NumberOfColumns_Clone[NumberOfRows]=NumberOfColumns;   // I used this so i don't lose the nr_of_columns
    ...
        for (int i = 0; i<=NumberOfRows; i++){
            for (int j = 0; j<=NumberOfColumns_Clone[i]; j++)
                cout << matrix[i][j] << " ";
            cout << endl;
        }
    
  • 或使用 null 作为分隔符

        for (int i = 0; i<=NumberOfRows; i++){
            for (int j = 0; j<=NumberOfColumns_Clone[i]; j++) {
                if (matrix[i][j] = 0) break;  // exit from inner loop on terminating null
                cout << matrix[i][j] << " ";
            }
            cout << endl;
        }
    

我重写了这个函数...希望对您有所帮助!

void getPoem(char *filePath)
{
    ifstream f(filePath);
    int numberOfRows=0;
    int numberOfColumns=0;
    char matrix[100][100];
    char s[100];
    int i;
    do
    {
        f.getline(s,100);
        for(i=0;i<strlen(s);i++)
            if(isalpha(s[i]))
            {
                matrix[numberOfRows][numberOfColumns++]=s[i];
            }
    numberOfRows++;
    numberOfColumns=0;
    }while(numberOfRows<4);
    int j;
    for(i=0;i<numberOfRows;i++)
    {
        for(j=0;j<100;j++)
        {
            cout<<matrix[i][j];
        }
    cout<<endl;
    }
}

为了帮助你一点,我会写下你犯了什么错误:

警告:"char [100]"的初始值设定项周围缺少大括号 [-缺少大括号]

警告:从 NULL 转换为非指针类型"char" [-Wconversion-null]

是简单的警告,但请确保它们会影响您的结果。