我可以在c#中确定这样的字符串长度吗?

时间:2017-09-08 19:15:29

标签: c# string-length

出于好奇,我试图在不使用属性或方法的情况下确定字符串长度,这可以在 C 中使用,但对\0的这个概念仍然是新的。

根据我的理解,我说的是 C ,这个字符是在将值设置为某个字符串后自动放置的,因此可以确定存储需要多少空间,但这如何在 C#

中起作用
string str = "someText";
int lenght = 0;
while (str[lenght]!='\0')
{
    lenght++;
}
Console.WriteLine(str);
Console.WriteLine("String lenght is : "+ lenght);
Console.ReadLine();

4 个答案:

答案 0 :(得分:3)

将字符串视为抽象的字符序列。有多种方法可以在计算机库中实现这种序列。以下是一些例子:

  • 以空值终止 - 字符序列以特殊字符值'\0'终止。 C使用此表示法。
  • 字符终止 - 这类似于以null结尾,但使用了不同的特殊字符。这种表现形式很少见。
  • 长度前缀 - 字符串的前几个字节用于存储其长度。 Pascal使用了这种表示法。
  • 长度和字符数组 - 此表示将字符串存储为具有字符数组的结构,并将长度存储在单独的区域中。

也可以使用混合表示,例如在长度和数组表示中存储以null结尾的字符串。

C#使用长度前缀和以null结尾的字符串的组合,并且还允许将空字符嵌入到字符串中。但是,这并不意味着您可以访问空终止符或长度字节,因为与C不同,C#执行绑定检查,并在尝试访问字符串末尾时抛出异常。

答案 1 :(得分:1)

  

字符串是String类型的对象,其值为文本。在内部,文本存储为Char对象的顺序只读集合。 C#字符串末尾没有空终止字符;因此,C#字符串可以包含任意数量的嵌入空字符(' \ 0')。字符串的Length属性表示它包含的Char对象的数量,而不是Unicode字符的数量。要访问字符串中的各个Unicode代码点,请使用StringInfo对象。

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/

C#字符串没有终止字符。相反,它们的实际长度与文本本身一起存储。这称为length-prefixed strings

您可以使用Length属性访问长度。

答案 2 :(得分:0)

在C中,nul字符终止作为字符数组处理的字符串是标准库支持的约定。它不是语言本身的一部分。请注意,没有任何内容可以自动地"在设置C字符串值时放置一个空字符,它由库和编译器处理常量。

C#不使用nul终止字符串,所以这些都不适用。

答案 3 :(得分:-1)

这是C#代码

    string str = "someText";
    int lenght = 0;

    foreach (char c in str)
    {
        lenght++;
    }
    Console.WriteLine(str);
    Console.WriteLine("String lenght is : "+lenght);
    Console.ReadLine();