字符串在C#中是如何终止的
本文关键字:终止 何终止 字符串 | 更新日期: 2023-09-27 18:14:33
此程序抛出ArrayIndexOutOfBoundException
。
string name = "Naveen";
int c = 0;
while( name[ c ] != ''0' ) {
c++;
}
Console.WriteLine("Length of string " + name + " is: " + c);
为什么会这样?如果字符串不是以null结尾。C#中如何处理字符串?如何在不使用string.Length
属性的情况下获得长度?我在这里很困惑。!
C#不像C和C++那样使用以NUL结尾的字符串。必须使用字符串的Length
属性。
Console.WriteLine("Length of string " + name + " is: " + name.Length.ToString());
或使用格式化程序
Console.WriteLine("Length of string '{0}' is {1}.", name, name.Length);
public static void Main()
{
unsafe
{
var s = "Naveen";
fixed (char* cp = s)
{
for (int i = 0; cp[i] != ''0'; i++)
{
Console.Write(cp[i]);
}
}
}
}
//打印Naveen
在C/C++中,字符串存储在一个没有智能和行为的char
数组AFAIR中。因此,要指示这样的数组在某个地方结束,必须在末尾添加''0。
另一方面,在C#中,字符串是一个容器(一个具有属性和方法的类(;附带说明一下,您可以将null分配给它的实例化对象。您不需要添加任何内容来指示它的结束位置。容器为您控制一切。因此,它也有迭代器(或者C#中的枚举器(。这意味着您可以使用foreach
和LINQ
表达式对其进行迭代
话虽如此,您可以在类似的代码中使用一个简单的计数器来获取字符串的长度:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LengthOfString
{
class Program
{
static void Main(string[] args)
{
string s = "abcde'0'0'0";
Console.WriteLine(s);
Console.WriteLine("s.Length = " + s.Length);
Console.WriteLine();
// Here I count the number of characters in s
// using LINQ
int counter = 0;
s.ToList()
.ForEach(ch => {
Console.Write(string.Format("{0} ", (int)ch));
counter++;
});
Console.WriteLine(); Console.WriteLine("LINQ: Length = " + counter);
Console.WriteLine(); Console.WriteLine();
//Or you could just use foreach for this
counter = 0;
foreach (int ch in s)
{
Console.Write(string.Format("{0} ", (int)ch));
counter++;
}
Console.WriteLine(); Console.WriteLine("foreach: Length = " + counter);
Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine();
Console.WriteLine("Press ENTER");
Console.ReadKey();
}
}
}
您正试图访问根据name
长度不可用的索引处的字符。你可以这样解决:
string name = "Naveen";
int c = 0;
while (c < name.Length)
{
c++;
}
然而,在c#this中不需要计算字符串的长度方法您可以简单地尝试
name.Length
编辑:根据@NaveenKumarV在评论中提供的内容,如果你想检查'0
字符,那么正如其他人所说,你可以尝试ToCharArray
方法。这是代码:
var result = name.ToCharArray().TakeWhile(i => i != ''0').ToList();