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

时间:2014-12-29 10:48:01

标签: c++ arrays matrix char

我正在尝试在二维数组中存储来自文件的字符,在我完成第一行的最后一个字后,我想转到下一行并执行相同的操作。 (我假设我的文字中有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]='\0';
    }
    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”斗争的原因。

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

2 个答案:

答案 0 :(得分:0)

我重写了这个功能......我希望这会对你有所帮助!

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]'[-Wmissing-braces]

的初始值设定项周围缺少大括号

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

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

答案 1 :(得分:0)

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;
        }