新行字符覆盖以下内容

2024-10-01 13:25:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个代码,在C语言的“#include”语句的末尾插入新行字符(“\n”)

(例如) [之前]

#include <stdio.h> #include <stdlib.h>  

[之后]

#include <stdio.h>
#include <stdlib.h>

所以我做了一个函数。varaible'raw'代表原始数据的字符串缓冲区,idx是一个索引变量,它在字符串变量'raw'中移动

def insert(raw, idx, new):  # inserts string(new) to the original string(raw). Location of insertion can be specified by variable idx.

  return raw[:idx] + new + raw[idx:]

使用上述函数,我还编写了如下代码:

includeFlag1 = False    # be ready to detect '<' of the include statement.
includeFlag2 = False    # Turned on when the '<' is detected. Turned off when the include statement ends.
elif raw[idx:idx+8] == '#include' : # include statement is detected. 

            includeFlag1 = True

elif raw[idx] == '<' and includeFlag1 == True:

            includeFlag2 = True

elif raw[idx] == '>' and includeFlag1 == True:

            raw = insert(raw, idx+1, '\n')  # adds the new-line charcter at the end of the include statement.
            includeFlag2 = False        # the include statement has just ended.
            includeFlag1 = False    
            idx = idx + 1

真正的问题是,当我运行上面的代码时,新行字符会覆盖“#”字符,这是“#include<>;'声明。 有关更多信息,请查看下面的调试日志。 日志记录如下: 原始[idx][icdFlag]includeFlag1 includeFlag2

==============================================================================

#   [icdFlag] False False
i   [icdFlag] True  False
n   [icdFlag] True  False
c   [icdFlag] True  False
l   [icdFlag] True  False
u   [icdFlag] True  False
d   [icdFlag] True  False
e   [icdFlag] True  False
    [icdFlag] True  False
<   [icdFlag] True  False
s   [icdFlag] True  True
t   [icdFlag] True  True
d   [icdFlag] True  True
i   [icdFlag] True  True
o   [icdFlag] True  True
.   [icdFlag] True  True
h   [icdFlag] True  True
>   [icdFlag] True  True

[icdFlag] False False
i   [icdFlag] False False
n   [icdFlag] False False
c   [icdFlag] False False
l   [icdFlag] False False
u   [icdFlag] False False
d   [icdFlag] False False
e   [icdFlag] False False
    [icdFlag] False False
<   [icdFlag] False False
s   [icdFlag] False False
t   [icdFlag] False False
d   [icdFlag] False False
l   [icdFlag] False False
i   [icdFlag] False False
b   [icdFlag] False False
.   [icdFlag] False False
h   [icdFlag] False False
>   [icdFlag] False False
#   [icdFlag] False False
i   [icdFlag] True  False
n   [icdFlag] True  False
c   [icdFlag] True  False
l   [icdFlag] True  False
u   [icdFlag] True  False
d   [icdFlag] True  False
e   [icdFlag] True  False
    [icdFlag] True  False
<   [icdFlag] True  False
s   [icdFlag] True  True
t   [icdFlag] True  True
r   [icdFlag] True  True
i   [icdFlag] True  True
n   [icdFlag] True  True
g   [icdFlag] True  True
.   [icdFlag] True  True
h   [icdFlag] True  True
>   [icdFlag] True  True

[icdFlag] False False
i   [icdFlag] False False
n   [icdFlag] False False
c   [icdFlag] False False
l   [icdFlag] False False
u   [icdFlag] False False
d   [icdFlag] False False
e   [icdFlag] False False
    [icdFlag] False False
<   [icdFlag] False False
t   [icdFlag] False False
i   [icdFlag] False False
m   [icdFlag] False False
e   [icdFlag] False False
.   [icdFlag] False False
h   [icdFlag] False False
>   [icdFlag] False False
v   [icdFlag] False False
o   [icdFlag] False False
i   [icdFlag] False False
d   [icdFlag] False False
    [icdFlag] False False
g   [icdFlag] False False
e   [icdFlag] False False
t   [icdFlag] False False
_   [icdFlag] False False
u   [icdFlag] False False
s   [icdFlag] False False
e   [icdFlag] False False
r   [icdFlag] False False
_   [icdFlag] False False
i   [icdFlag] False False
n   [icdFlag] False False
f   [icdFlag] False False
o   [icdFlag] False False
(   [icdFlag] False False
c   [icdFlag] False False
h   [icdFlag] False False
a   [icdFlag] False False
r   [icdFlag] False False
    [icdFlag] False False

*[icdFlag]假假假

当然,我已经检查过原始C源代码是否缺少“#”字符,但它没有。我想知道为什么会发生这种事


Tags: ofthe代码falsetruenewrawinclude
2条回答

也许是这个

#!/usr/bin/env python
my_code = """
# Other stuff
#include <stdio.h> #include <stdlib.h> #include <other.h>
# Other stuff
"""
import os
import re
for line in my_code.splitlines():
    include_list = re.findall(r"include <\w+\.h>", line)
    if include_list:
        print(os.linesep.join(include_list))
    else:
        print(line)

我可能会把它分成几行,然后用“include”分开

processedLines = [] # put into an array
lines = raw.split('\n')
for line in lines:
    if "#include" in line:
        includes = line.split("#include ") # "#include <foo.h> #include <bar.h>" becomes ["", "<foo.h>", "<bar.h>"]
        for include in includes[1:] # skip the blank at the beginning
            processedLines.append("#include " + include)
    else
        processedLines.append(line)

相关问题 更多 >