编程语言
首页 > 编程语言> > c# – 循环双引号但忽略单引号中的双引号

c# – 循环双引号但忽略单引号中的双引号

作者:互联网

我有我认为是逻辑问题.我在C#编码,但欢迎使用一般的伪代码解决方案.

我有这个文本文件,包含,例如,这个文本:

blah "hello john"
blah 'the code is "flower" '
blah "good night"

我想循环使用双引号并对它们做一些事情,但我想忽略单引号中包含的双引号.我得到开头双引号和结束双引号的位置(包含文本文件内容的字符串数据):

C#

// Start searching from beginning
int quotestart = 0, quoteend = 0;

while (data.IndexOf('"', quotestart) != -1)
{
  // Get opening double quote
  quotestart = data.IndexOf('"', quotestart);
  // Get ending double quote
  quoteend = data.IndexOf('"', quotestart + 1);

  string sub = data.Substring(quotestart + 1, quoteend - quotestart - 1);
  Console.WriteLine(sub);

  // Set the start position for the next round
  quotestart = quoteend + 1;
}

使用我的代码,输出将是:

hello john
flower
good night

因为“花”在单引号内,我希望我的输出为:

hello john
good night

编辑

我目前正在开发一种方法,我首先在单引号之间填充所有数据,例如’A’.这样,当我遍历双引号时,忽略单引号之间的任何数据.不确定这是否是正确的方法.

解决方法:

I tried googling finite state machines but having no formal training in computer engineering I must admit I was a bit lost. Do you have any additional pointers?

FSM是最简单的计算机形式之一.这个想法是你有一定数量的“状态”信息和稳定的输入流.每个输入使得状态以可预测的方式改变,仅基于当前状态和当前输入,并且导致可预测的输出发生.

因此,假设您的输入是单个字符,输出是单个字符或“空”字符.这是一个做你想要的FSM:

>州是外面的,内心的和内心的.
>输入是“,”和x.(WOLOG让x代表任何其他角色.)

我们有三个状态和三个输入,因此有九种可能的组合.

>如果我们在OUTSIDE并获得x,请保持OUTSIDE并发出null.
>如果我们在OUTSIDE并获得“,请转到INSIDEDOUBLE并发出null.
>如果我们在OUTSIDE并获得’,请转到INSIDESINGLE并发出null.
>如果我们INSIDEDOUBLE并获得x,请保持INSIDEDOUBLE并发出x
>如果我们INSIDEDOUBLE并获得“,请转到外部并发出空值
>如果我们是INSIDEDOUBLE并获得’,保持INSIDEDOUBLE并发出’
>如果我们是INSIDESINGLE并获得x,请保持INSIDESINGLE并发出null
>如果我们是INSIDESINGLE并获得“,请保持INSIDESINGLE并发出null
>如果我们是INSIDESINGLE并获得’,请转到OUTSIDE并发出null

唯一剩下的就是说开始状态是OUTSIDE.

所以我们假设输入是1“2”3’4“5”’6.状态和输出是:

> OUTSIDE获得1,发出null,保持OUTSIDE.
> OUTSIDE获取“,发出null,变为INSIDEDOUBLE.
> INSIDEDOUBLE获得2,发出2,保持INSIDEDOUBLE
> INSIDEDOUBLE获取“,发出null,进入外部.
> OUTSIDE获得3,发出null,保持OUTSIDE.
> OUTSIDE获取’,发出null,进入INSIDESINGLE

…自己填写其余的.

这是否足以让您编写代码?

标签:c,iteration,quotes,double-quotes
来源: https://codeday.me/bug/20190713/1446523.html