我收到了TSV文件。 我正在使用getchar()函数读取它并输入program<运行我的函数时,testfile.tsv进入我的命令行。
while ((c=getchar()) != EOF) {
我能够通读它,但我不知道如何将字符串存储在多维数组中。如何制作一个A [ROW] [COLUMN]的数组?
示例输入(\ t是制表符,\ n是换行符):
任何\ t已\ tPossible \ tYay \ n
什么\ TDO \ TI \ TDO \ n
此\那朵\ tgreat \2瓦特\ n
这是我尝试过的。
if (c == '\t') {
columncount += 1;
A[rowcount][columncount] = c;
};
if (c == '\n') {
columncount += 1;
A[rowcount][columncount] = c;
rowcount += 1;
columncount = 0;
}
答案 0 :(得分:0)
这很简单:当您读取选项卡时,会增加用于列的索引变量,当您读取换行符时,您将重置列索引并增加行索引变量。
在开始阅读之前,应确保索引变量已正确初始化,并且在递增变量时不会超出范围。
另外,不要忘记在获得制表符或换行符时终止字符串。不要将制表符或换行符放在字符串中。
最后,你需要一个数组数组的数组,即
char A[ROWS][COLUMNS][MAX_LENGTH_OF_STRINGS];
翻译成代码,您可以执行类似
的操作int c;
int row = 0;
int column = 0;
int string_index = 0;
while ((c = getchar()) != EOF)
{
if (c == '\t')
{
A[row][column++][string_index] = '\0' // Terminate the string
string_index = 0;
}
else if (c == '\n')
{
A[row++][column][string_index] = '\0' // Terminate the string
string_index = 0;
column = 0;
}
else
{
if (string_index >= MAX_LENGTH_OF_STRINGS)
{
printf("Error: String to long at row %d, column %d\n", row, column);
break;
}
if (row >= ROW)
{
printf("Error: row is to large: %d\n", row);
break;
}
if (column >= COLUMN)
{
printf("Error: column is to large: %d (at row %d)\n", column ,row);
break;
}
A[row][column][string_index++] = c;
}
}
现在要对加载的文本做些什么,打印它怎么样?
for (row = 0; row < ROW; ++row)
{
for (column = 0; column < COLUMN; ++column)
{
printf("A[%d][%d] = %s\n", row, column, A[row][column]);
}
}