【问题标题】:How to read each character from string in C#如何从C#中的字符串中读取每个字符
【发布时间】:2015-12-09 09:21:54
【问题描述】:

我想做的是编写一个程序,该程序接受文件输入或用户输入的字符串,并逐个字符地检查字符串中是否有空格或双/单引号,然后将其断开并制作一个单独的该单词的字符串。 我使用 Split 函数根据给定的分隔符拆分字符串中的单词。但是我的代码不适用于引号中的单词。 其实这个任务是和编译器构建课程有关的。

例如:

用户输入:sjhdfn"ff"fgfgfg".'\nff' 'f'

单词的输出应该是: sjhdfn //ID

"ff"fgfgfg" //字符串

\n //字符=换行

ff //ID

'f' //字符

谁能帮助用双引号对输出的字符串部分进行编码?

【问题讨论】:

  • 三个引号,中间的那些没有被屏蔽?我不认为这是一个有效的语法,如果是,check character by character if space or double/single quotation come in string then break it 是不够的。实际上,这种情况会产生歧义,如果没有额外的规则就无法处理
  • 如果任务与编译器构建课程有关,我强烈建议您至少了解Parse tree 是什么。将不复杂的“代码”解析为它并不难,但它非常方便。
  • 您好 Zloidooraque,感谢您的评论。不用担心语法,我只想以我在问题描述中提到的形式输出。我正处于 CC 的初始阶段,我不需要处理语义错误,我只需要在所需的 wordBreaker 进入字符串时打破每个单词。一旦双引号出现在字符串中,就用它打破前面的字符序列并组成一个单词,然后开始一个新单词,包括双引号打开和关闭关闭。无论介于两者之间,只需打印即可。
  • 你可能猜到了,只有当双引号本身在引号'"' 内时,才允许使用奇数个双引号。你有三个 d.quotations。它是自动错误的。对于那些在双引号块之外(不属于单词)的引号,单引号数也必须是偶数。
  • 如果保证输入字符串始终有效,任务很简单:trim() 输入字符串,查看第一个符号是否为 d.quotation,由 d.quotations 分割(带有保留选项Split 中打开了空子字符串),如果第一个符号是 d.quotation,则结果集合中的所有奇数项 (0,2,4..) 都是字符串,如果不是,所有偶数项都是字符串。在其中找到“\n”。用引号分割剩余的子字符串:使用与 d.quotations 相同的算法,你会发现chars。用space 分割剩下的所有内容,你就有了IDs

标签: c# string compiler-construction


【解决方案1】:

你可以使用

foreach(char c in s)

for(int i = 0; i < s.Length; i++) DoSomething(s[i]),

但正如我在 cmets 中所说,问题出在其他地方。当然,Split 会将你所谓的“单词”一分为二,如果它的分隔符列表中有双引号。

【讨论】:

  • 我已经尝试了两个循环,但它们没有提供所需的输出。我想在单词中添加双引号,因为编译器将其视为字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2015-06-29
  • 2020-09-08
  • 1970-01-01
  • 2014-11-22
相关资源
最近更新 更多