我正在尝试编写一些简单的代码,搜索两个字典中的字符串,如果字符串出现在两个字典中,则打印到控制台。我希望用户能够通过控制台输入字符串,然后将字符串作为变量传递给消息。我想知道如何从控制台获取getting
字符串并将其用作以下方法调用中的参数。
[x rangeOfString:"the string goes here" options:NSCaseInsensitiveSearch];
我不确定如何从用户那里获取字符串。我是否将scanf()或fgets()用于char,然后将其转换为NSSstring,或者只是扫描到NSString本身。我当时想知道如何将该字符串作为参数传递。请帮忙:
这是我到目前为止的代码。我知道这不简洁,但我只想完成工作:
#import <Foundation/Foundation.h>
#include <stdio.h>
#include "stdlib.h"
int main(int argc, const char* argv[]){
@autoreleasepool {
char *name[100];
printf("Please enter the name you wish to search for");
scanf("%s", *name);
NSString *name2 = [NSString stringWithFormat:@"%s" , *name];
NSString *nameString = [NSString stringWithContentsOfFile:@"/usr/share/dict/propernames" encoding:NSUTF8StringEncoding error:NULL];
NSString *dictionary = [NSString stringWithContentsOfFile:@"/usr/share/dict/words" encoding:NSUTF8StringEncoding error:NULL];
NSArray *nameString2 = [nameString componentsSeparatedByString:@"\n"];
NSArray *dictionary2 = [dictionary componentsSeparatedByString:@"\n"];
int nsYES = 0;
int dictYES = 0;
for (NSString *n in nameString2) {
NSRange r = [n rangeOfString:name2 options:NSCaseInsensitiveSearch];
if (r.location != NSNotFound){
nsYES = 1;
}
}
for (NSString *x in dictionary2) {
NSRange l = [x rangeOfString:name2 options:NSCaseInsensitiveSearch];
if (l.location != NSNotFound){
dictYES = 1;
}
}
if (dictYES && nsYES){
NSLog(@"glen appears in both dictionaries");
}
}
}
感谢。
答案 0 :(得分:0)
在C中以交互方式安全地从标准输入读取kind of involved。标准函数需要一个固定大小的缓冲区,这意味着某些输入将太长(并损坏您的内存!)或者您必须在循环中读取。不幸的是,Cocoa并没有给我们提供很多帮助。
对于完全读取标准输入 (如果您希望输入文件超过标准输入),则有NSFileHandle,这使得它非常简洁。但是对于你想要在这里进行的交互式阅读和写作,你几乎必须使用链接的答案进行阅读。
一旦你在C字符串中读到了一些输入,就可以轻松地将它变成一个NSString,例如+[NSString stringWithUTF8String:]
。