我在想一个不使用Length
属性来计算c#中字符串长度的解决方案。
我能想到的就是完成这件事
程序在C#中
public static int strlen (string s)
{
string temp = s + '/0';
char [] c = temp.ToCharArray();
int length = 0;
while (c[length]!='/0') length++;
length--;
return length;
}
但这是非常幼稚的编程,它还使用了一个额外的temp变量,你们还能想出比这个更好的解决方案吗?
发布于 2009-07-05 06:50:02
你可以使用不安全的代码以O(1)的速度获得长度,因为C#字符串的前缀是它们的长度--这可能是get_Length函数在内部做的事情(这就是为什么你应该使用内置的方式,而不是自己编写):
public static unsafe int strlen(string s)
{
if(s == null) {
// Handle the error here
}
int length = 0;
fixed(char *pStr = s) {
length = *(((int *)pStr) - 1);
}
return length;
}
或者如果你更喜欢老式的方法:
public static unsafe int strlen(string s)
{
if(s == null) {
// Handle the error here
}
int length = 0;
fixed(char *pStr = s) {
char *pEnd = pStr;
while(*pEnd++ != '\0');
length = (int)((pEnd - pStr) - 1);
}
return length;
}
发布于 2009-07-05 06:19:32
public static int strlen2 (string s) {
int length = 0;
foreach (char c in s) length++;
return length
}
我不确定这样做的意义是什么。
发布于 2009-07-05 06:47:57
我认为为了对Leiz的答案进行一些优化,我会在第三行使用前增量而不是后增量来阅读:
foreach(char c in s) ++length
这会使它的性能下降一小部分。
https://stackoverflow.com/questions/1083550
复制相似问题