还有另一种方法吗?

时间:2017-11-07 12:49:55

标签: ios objective-c

我打算编写一个代码,允许在某种数组或类似的列表中输入名称,但无法弄清楚如何使用允许以字符串形式输入名称的代码然后我转换成一个数组。还有另外一种方法吗?如果是这样,请帮助......我也想知道如何在输出元素列表的末尾删除这些逗号。

NSLog(@"Enter the names: ");
NSFileHandle *input = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [NSData dataWithData:[input availableData]];
NSString *inputString = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding];
inputString = [inputString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSMutableArray *list=[inputString componentsSeparatedByString:@","];

 for (NSUInteger i = list.count; i > 1; i--) [list exchangeObjectAtIndex:i - 1 withObjectAtIndex:arc4random_uniform((u_int32_t)i)];
NSLog(@"Shuffled list is: %@",list);
   return 0;

以下是我的输出显示方式:

2017-11-07 15:46:57.448280 inputAcc[971:35071] Enter the names: 
diana,eunice,hanifa,patricia,sitna,fiona,anita
2017-11-07 15:47:49.813347 inputAcc[971:35071] Shuffled list is: (
    diana,
    sitna,
    patricia,
    eunice,
    anita,
    hanifa,
    fiona
)

1 个答案:

答案 0 :(得分:0)

  

输入数组的元素而不先按照我的方式使用字符串...我想要的输入格式是声明一个空数组,然后我可以用一些输入元素填充

您是否尝试一次读取一行输入并在没有输入时停止?如果是这样,那么没有标准的Objective-C框架方法来实现这一点,它们提供了GUI和批量文件导向的I / O例程,您需要构建自己的。

这是一种简单的方法,还有其他方法。 Objective-C是基于C构建的,可以使用标准的C库,这些库具有字符和特性。面向行的输入函数。适合您的函数是fgetln(),它最多读取一行输入,返回指向第一个字节的指针和一个字节数。您可以将其转换为NSString,删除尾随换行符(如果有):

// MINIMAL read line, lacks proper error checking etc.
NSString *readLine()
{
   size_t count;
   char *inp = fgetln(stdin, &count);

   if (inp == NULL) return nil;

   // remove any trailing newline from count
   if (count > 0 && inp[count-1] == '\n') count--;

   return [[NSString alloc] initWithBytes:inp
                                  length:count
                                encoding:NSUTF8StringEncoding];
}

使用上述内容,您可以使用以下内容读取空行:

NSMutableArray *list = [NSMutableArray new];
NSString *line;

NSLog(@"Enter the names: ");
while( (line = readLine()) && line.length > 0 )
   [list addObject:line];
  

我也想知道如何在输出元素列表的末尾删除这些逗号。

这些逗号只是NSLog格式化输出的方式。如果您希望自己生成不同的结果格式。查找NSString的{​​{1}}等方法,如果您不希望stringWithFormat:的时间戳查找C输出函数,例如NSLog

HTH