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