我正在尝试在二维数组中存储来自文件的字符,在我完成第一行的最后一个字后,我想转到下一行并执行相同的操作。 (我假设我的文字中有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”斗争的原因。
任何帮助将不胜感激。 非常感谢你!
答案 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)
NumberOfColumns
和NumberOfColumns_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;
}