如何实现字符逐字符遍历?

发布于 2024-08-08 13:35:23 字数 354 浏览 5 评论 0原文

当我应用 IEnumerator 并执行 MoverNext() 时,它会像这样遍历 C 风格 'a' 'p' 'p' 'l' 'e' '\o' 直到找到空字符?我以为它会返回整个字符串。这里的枚举是如何工作的?

    string ar = "apple";

    IEnumerator enu = ar.GetEnumerator();

    while (enu.MoveNext())
    {

        Console.WriteLine(enu.Current);
    }

我得到的输出为

a
p
p
l
e

When i apply IEnumerator and perform MoverNext() will it traverse like
C-Style 'a' 'p' 'p' 'l' 'e' '\o' until it finds null character?I thought it would return the entire string.How does the enumeration work here?

    string ar = "apple";

    IEnumerator enu = ar.GetEnumerator();

    while (enu.MoveNext())
    {

        Console.WriteLine(enu.Current);
    }

I get output as

a
p
p
l
e

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

苍景流年 2024-08-15 13:35:23

C# 中的字符串不是以 null 结尾的。或者更确切地说,字符串以 null 结尾的事实是对用户隐藏的实现细节。字符串“apple”有五个字符,而不是六个。你要求看这五个角色,我们就把他们全部展示给你。没有第六个空字符。

Strings are not null-terminated in C#. Or, rather, the fact that strings are null-terminated is an implementation detail that is hidden from the user. The string "apple" has five characters, not six. You ask to see those five characters, we show all of them to you. There is no sixth null character.

紫罗兰の梦幻 2024-08-15 13:35:23

空字符不是 CLR / .Net 字符串的固有部分,因此不会显示在枚举中。枚举字符串将按顺序返回字符串的字符

The null character is not an inherent part of a CLR / .Net string and hence will not show up in the enumeration. Enumerating a string will return the characters of the string in order

陪我终i 2024-08-15 13:35:23

枚举器每次迭代(MoveNext() 调用)返回底层容器的每个元素。在这种情况下,您的容器是一个 string ,其元素类型是 char,因此枚举器每次迭代都会返回一个字符。

此外,字符串的长度由 string 类型得知,枚举器实现可以利用该类型来了解何时终止其遍历。

An enumerator returns each element of the underlying container per iteration (MoveNext() call). In this case, your container is a string and its element type is char, so the enumerator will return a character per each iteration.

Also, the length of the string is known by the string type, which may be leveraged by the enumerator implementation to know when to terminate its traversal.

勿忘初心 2024-08-15 13:35:23

C# 字符串的存储方式与 COM 字符串类似,有一个长度字段和一个 unicode 字符列表。因此不需要终结者。它使用更多的内存(多 2 个字节),但字符串本身可以保存空值,没有任何问题。

另一种解析字符串的方法与您的代码使用相同的功能,更像 C#:

string s="...";
foreach(char c in s)
  Console.WriteLine(c);

C# strings are stored like COM strings, a length field and a list of unicode chars. Therefore there's no need of a terminator. It uses a bit more memory (2 bytes more) but the strings themselves can hold nulls without any issues.

Another way to parse strings that uses the same functionality as your code only is more C#-like is:

string s="...";
foreach(char c in s)
  Console.WriteLine(c);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文