0

我正在尝试获取包含超过 47,000 个单词(字典)的文件的内容。我的目标是生成一个随机数并将单词定位在文件的特定行,以便在每次运行程序时获得不同的单词,然后输出该单词。我一直在研究但我没有找到任何答案,这就是我目前所拥有的,它只需要字符,但我想要单词

//
//  main.m
//  wordaday
//
//  Created by Eddy Guzman on 11/5/13.
//  Copyright (c) 2013 Eddy Guzman. All rights reserved.
//

#import <Foundation/Foundation.h>

bool checkFile( NSString * path)
{
    NSFileManager *filemgr;

    filemgr = [NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath: path ] == YES)
    {
        return TRUE;
        NSLog (@"File exists");
    }

    else
    {
        NSLog (@"File not found");
        return false;
    }

}

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // insert code here...
        NSLog(@"Hello, World!");
        NSString * path = @"/Users/eddy30/Eddy's Documents/School/Millersville/Fall2013/wordaday/dictionary.txt";



        if(checkFile(path) == TRUE)
        {
            NSLog(@"WOHOOOO");
        }

        NSString* content = [NSString stringWithContentsOfFile:path];

        //NSFileHandle *myFile = fileHandleForReadingAtPath:path;
        int rand = arc4random_uniform(47049);
        char Word = [content characterAtIndex:rand];


        NSLog(@"Word of the day is: %c", Word);
    }
    return 0;
}
4

1 回答 1

0

在这一步之间:

NSString* content = [NSString stringWithContentsOfFile:path];

而这一步:

char Word = [content characterAtIndex:rand];
NSLog(@"Word of the day is: %c", Word);

唔。这很令人困惑。照原样,您正在将整个文件读入被NSString调用content,然后从中挑选一个随机字符NSString,然后输出它,声称它是一个单词。

你如何实际修复这个程序将很大程度上取决于你正在阅读的文件的格式。您需要一个步骤才能变成contentof NSArrayNSStrings数组的每个索引代表字典中的不同单词。例如,如果您的文件包含一行中的每个单词,您将需要使用这个不错的方法:

NSArray *arrayOfWords = [content componentsSeperatedByString:@"\n"];

然后,您将使用随机生成int的索引作为该数组的索引,然后像这样记录它:

NSLog(@"Word of the day is: %@", [arrayOfWords objectAtIndex:rand]);

如果原始问题中没有更多详细信息,我可以提供的帮助不多。我不知道原始文件的格式。我不知道您声称是字典的原始文件是否包含定义等。但是这个答案解释了您想要做什么的要点。


编辑:请注意,在生成随机数时,您需要这样做:

int rand = arc4random_uniform([arrayOfWords count]-1);

为了避免超出范围的索引。

于 2013-11-06T04:05:02.953 回答