English 中文(简体)
在目标C中,如何打印 N 空格? (使用字符串和字符串)
原标题:In Objective-C, how to print out N spaces? (using stringWithCharacters)

以下试图打印N号空格数(或例子中的12个):

NSLog(@"hello%@world", [NSString stringWithCharacters:" " length:12]);

const unichar arrayChars[] = {   };
NSLog(@"hello%@world", [NSString stringWithCharacters:arrayChars length:12]);

const unichar oneChar =    ;
NSLog(@"hello%@world", [NSString stringWithCharacters:&oneChar length:12]);

但他们都打印出奇怪的东西, 如 hello world ...... 我认为“字符阵列” 与“字符阵列” 相同, 与“ 字符指针” 相同? API Spec 说这是“ C 的 Unicode 字符阵列 ” ( Unicode, 是 UTF8吗? 如果是的话, 那么它应该与 ASCII 兼容)...... 如何让它运作, 为什么这三种方式都不会起作用?

最佳回答
问题回答

这会让你得到你想要的:

NSLog(@"hello%@world", [@"" stringByPaddingToLength:12 withString:@" " startingAtIndex:0]);

我认为你的问题在于你误解了 应该做的是什么。 它不应该重复字符, 而是把它们从数组复制到字符串中 。

因此,在您的情况中,在数组中只有一个,意思是其他11个字符将取自记忆中的 araryChars

如果您想要打印出 n 空格的图案, 最容易的方法就是使用 < code>- (NSString *) stringByPaddingToLength: with String: string: startingAtIndex: , 即创建类似的东西 。

NSString *formatString = @"Hello%@World";
NSString *paddingString = [[NSString string] stringByPaddingToLength: n withString: @" " startingAtIndex: 0];
NSLog(formatString, paddingString);

这可能是最快的方法:

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];
}

string withoutCharaters: 长度: 方法使 NSstring (或一个子类 NSstring 的例子) 使用 C 数组中的第一个长度字符。 它不会在给定字符阵列达到长度之前循环 。

您看到的输出是内存区 12 Unicode 字符, 从您通过 1 Unicode 字符数组的位置开始 。

这应该行得通。

NSLog(@"hello%@world", [NSString stringWithCharacters:"            " length:12]);




相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签