string str = "test";
int counter = 0;
for (int i = 0; str[i] != '\n'; i++)
{
counter++;
}
无法处理错误索引,我不想使用str.length属性,也不想使用foreach循环方法。
请帮忙
提前致谢。
答案 0 :(得分:3)
字符串不以c#中的任何特殊字符结尾。
我现在只能考虑你的要求(因为你不想使用Framework函数)是访问字符串中的字符,直到它抛出IndexOutOfRangeException
例外。
试试这个:(不推荐)
string str = "test";
int counter = 0;
try
{
for (int i = 0; ; i++)
{
char temp = str[i];
counter++;
}
}
catch(IndexOutOfRangeException ex)
{
}
Console.WriteLine(counter);
答案 1 :(得分:0)
我在String.cs(反汇编)中发现了一些有趣的函数:
private static unsafe int wcslen(char* ptr)
{
char* end = ptr;
while (((uint)end & 3) != 0 && *end != 0)
end++;
if (*end != 0)
{
while ((end[0] & end[1]) != 0 || (end[0] != 0 && end[1] != 0))
{
end += 2;
}
}
for (; *end != 0; end++)
;
int count = (int)(end - ptr);
return count;
}
用法:
class Program
{
private static void Main(string[] args)
{
var a = "asample";
unsafe
{
fixed (char* str_char = a)
{
var count = wcslen(str_char);
}
}
}
private static unsafe int wcslen(char* ptr)
{
// impl
}
}
只是好奇心。不建议在实际代码中使用。最有趣的事情:
以下是wcslen
函数内的注释:
// The following code is (somewhat surprisingly!) significantly faster than a naive loop,
// at least on x86 and the current jit.
:)