这可能是最快的方法:
NSString *spacesWithLength(int nSpaces)
{
char UTF8Arr[nSpaces + 1];
memset(UTF8Arr, , nSpaces * sizeof(*UTF8Arr));
UTF8Arr[nSpaces] = ;
return [NSString stringWithUTF8String:UTF8Arr];
}
您当前代码之所以不起作用,是因为 string withCharacters:
期望一个字符长度为12的数组,而您的数组仅是一个字符长度为 的字符组。 因此,要修正,您必须为您的数组创建缓冲(在此情况下,我们使用一个 charles
数组,而不是一个 unicochar
,因为我们很容易 emset
a字符组,但不能使用 unchar
数组)。
以上我提供的方法可能是动态长度最快的方法。 如果您愿意使用 GCC 扩展, 而且您需要固定的空格, 您可以做到这一点 :
NSString *spacesWithLength7()
{
unichar characters[] = { [0 ... 7] = };
return [NSString stringWithCharacters:characters length:7];
}
不幸的是,这一延长与变数不起作用,因此必须是不变的。
透过海合会扩展和预处理宏的魔力, 我给你们... 。 Repeatetoticr! 只需通过一个字符串( 或一个字符串), 剩下的就够了! 现在, 买下你只需要19.95美元, 操作员就站在旁边! (根据@JeremyL 的建议)
// step 1: determine if char is a char or string, or NSString.
// step 2: repeat that char or string
// step 3: return that as a NSString
#define repeat(inp, cnt) __rep_func__(@encode(typeof(inp)), inp, cnt)
// arg list: (int siz, int / char *input, int n)
static inline NSString *__rep_func__(char *typ, ...)
{
const char *str = NULL;
int n;
{
va_list args;
va_start(args, typ);
if (typ[0] == i )
str = (const char []) { va_arg(args, int), };
else if (typ[0] == @ )
str = [va_arg(args, id) UTF8String];
else
str = va_arg(args, const char *);
n = va_arg(args, int);
va_end(args);
}
int len = strlen(str);
char outbuf[(len * n) + 1];
// now copy the content
for (int i = 0; i < n; i++) {
for (int j = 0; j < len; j++) {
outbuf[(i * len) + j] = str[j];
}
}
outbuf[(len * n)] = ;
return [NSString stringWithUTF8String:outbuf];
}