首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在c#中实现strlen()?

如何在c#中实现strlen()?
EN

Stack Overflow用户
提问于 2009-07-05 06:14:50
回答 4查看 13.9K关注 0票数 0

我在想一个不使用Length属性来计算c#中字符串长度的解决方案。

我能想到的就是完成这件事

程序在C#中

代码语言:javascript
复制
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变量,你们还能想出比这个更好的解决方案吗?

EN

回答 4

Stack Overflow用户

发布于 2009-07-05 06:50:02

你可以使用不安全的代码以O(1)的速度获得长度,因为C#字符串的前缀是它们的长度--这可能是get_Length函数在内部做的事情(这就是为什么你应该使用内置的方式,而不是自己编写):

代码语言:javascript
复制
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;
}

或者如果你更喜欢老式的方法:

代码语言:javascript
复制
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;
}
票数 5
EN

Stack Overflow用户

发布于 2009-07-05 06:19:32

代码语言:javascript
复制
public static int strlen2 (string s) {
    int length = 0;
    foreach (char c in s) length++;
    return length
}

我不确定这样做的意义是什么。

票数 3
EN

Stack Overflow用户

发布于 2009-07-05 06:47:57

我认为为了对Leiz的答案进行一些优化,我会在第三行使用前增量而不是后增量来阅读:

代码语言:javascript
复制
foreach(char c in s) ++length

这会使它的性能下降一小部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1083550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档