小编Vin*_*Gao的帖子

仅当'\ t'的出现次数超过数字时,才用'空格'替换'\n'

我有成千上万个制表符分隔的数据文件,每个文件都像:

a0\ta1\ta2\ta3\ta4\ta5\ta6\ta7\ta8\ta9\n
b0\tb1\tb2\tb3\tb4\tb5\tb6\tb7\tb8\tb9\n
...
Run Code Online (Sandbox Code Playgroud)

但是,偶尔会有包含(随机)格式错误的行的文件,例如:

a0\ta1\ta2\ta3_0\n
a3_1\ta4\ta5\ta6\ta7\ta8\ta9\n
b0\tb1\tb2_0\n
b2_1\tb3\tb4\tb5\tb6\tb7\tb8\tb9\n
...
Run Code Online (Sandbox Code Playgroud)

其中a3_0,a3_1(b2_0,b2_1相应)是最初由空格分隔的a3(b2分别)部分.我想\n在一行的末尾用白色空格替换每个行,只有当行太短或太少时\t.目前5似乎是一个安全的门槛.

我经常sed用来做一些修改,比上面简单得多.我想知道是否sed或其他一些命令(比如awk?我还需要学习)可用于快速处理(因为我有很多文件).谢谢.

awk sed

3
推荐指数
1
解决办法
74
查看次数

从bitset获取某些位的十进制值的快速方法

我有一个可变mask类型的std::bitset<8>

std::string bit_string = "00101100";
std::bitset<8> mask(bit_string);
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法可以快速屏蔽掉另一个给定的相应(三个)位std::bitset<8> input并将所有这些屏蔽的位移到最右边?例如,如果input10100101,那么我想快速得到十进制00000101等于5.然后,我可以vect[5]为了快速索引第六元素的vectstd::vector<int>尺寸为8.

或者更确切地说,我可以快速获取被屏蔽的位的十进制值(保留其相对位置)吗?或者我不能?

我想在我的情况下,我可以采取的优势是bitset<8> mask.而且我应该以某种方式操纵它来快速完成工作.

我觉得这样(由Spektre补充):

mask  00101100b 
input 10100101b
---------------
&     ??1?01??b
>>         101b
             5
Run Code Online (Sandbox Code Playgroud)

c++ algorithm bit-manipulation bitset

2
推荐指数
2
解决办法
369
查看次数

标签 统计

algorithm ×1

awk ×1

bit-manipulation ×1

bitset ×1

c++ ×1

sed ×1