解析C中的单词;翻译计划

时间:2013-04-11 23:05:05

标签: c parsing localization

我正在开发一个程序,将用户(英语)中的字符串翻译成西班牙语。 对于作业,我给出了一个文件,其中包含100个单词的列表及其西班牙语等价物。我已成功打开该文件,并将其提供给带有二维数组的字符串。

我遇到的困难是解析单词,这样我就可以找到给定单词的等效版本;任何未给出的单词都应该替换为星号(*)。关于如何从用户输入的字符串中解析单词的任何想法? 下面是源代码的snippits,以节省一些时间。

- 由于

char readFile[100][25];

fp = fopen("words.dat", "r");

if (fp == NULL){
   printf ("File failed to load\n");
}

//This is how I stored the file into the two dimensional string.
while (fgets(readFile, 100, fp)){
   x++;
}

printf ("User please input string\n");
gets (input);

就我而言。我注释掉了输出单词的for循环,所以我可以看到单词(为了好奇)并且它是成功的。文件字符串的格式是    (英文单词),(西班牙语单词)。

1 个答案:

答案 0 :(得分:2)

首先,您声明的数组是100个25个字符数组的数组。如果我们谈论“行”,则意味着你有100行,每行可以是24个字符(记住我们需要一个额外的终止'\0'字符)。如果你想要25行,每行99个字符,请切换大小的位置。

其次,一遍又一遍地覆盖数组的相同字节。由于每个子阵列实际上只有25个字符,因此您可以使用fgets调用覆盖最多四个阵列。

我建议这样的事情:

size_t count = 0;
for (int i = 0; i < sizeof(readFile) / sizeof(readFile[0]) &&
                fgets(readFile[i], sizeof(readFile[i]), fp); i++, count++)
{
}

这将确保您读取的内容不会超过您的存储容量,并自动读入数组中正确的“行”。循环count将包含您读取的行数。