如何等长梯度切割字符串生成字符串集?

本人是生物学专业的学生,现遇到如下问题:
现有一条长度4M的基因序列(4,000,000个字符的长度),在试验设计中,想要把这个序列切割成等长的片段(等长字符串),并且是梯度切割(每次移码一个字符的长度),最后的结果是生成一组等长的片段集合(相当于 “字符串组”或“数组” )。
例如:假设字符串
“atggcgtttctgctttcattcggaactgaggtgcgggacgagctgcggcgcaactggggatggatcctggccgctggaatcgtcatggtgcttgcctggcactgggcaatctgttccttgccaccgtcgcatcggtttactacgtcggcctgttgatgatcctggggggcgccgcgcagatgggcgtgcgtgcaggtctttcgcgccaccggctggagcc…………”
是全长4M的基因序列的一小部分,想切割成长度为20个字符的字符串集合,
第一次切割生成的字符串是“atggcgtttctgctttcatt”,相当于字符串的第1个字符到第20个字符,
第二次切割生成的字符串是“tggcgtttctgctttcattc”,相当于字符串的第2个字符到第21个字符,
第三次切割生成的字符串是“ggcgtttctgctttcattcg”,相当于字符串的第3个字符到第22个字符,
第四次切割生成的字符串是“gcgtttctgctttcattcgg”,相当于字符串的第4个字符到第23个字符,
…………
第n次切割生成的字符串相当于字符串的第 ”n” 个字符到第 ”n+20-1” 个字符。
切割生成20个字符长度的片段集合以后,还要切割生成其他长度的片段集合,如10、15、16等等长度,所以切割片段的目的长度最好可以做为一个可调整的参数来设置,这样就可以自动切割成集合内等长、不同集合内长度不等的多个集合了。
不知是否有高手可以帮助写一段代码,来实现这个想法。先在此道谢了。

补充:4M的字符串切割生成长度为20的字符串集合,会产生大概80M的文件,不知道能不能直接生成TXT文档。

4个回答

matlab里面直接用str[i:i+N-1],就直接取出了字符串切片,不确定你的问题是不是这样?

yuanzhen_licheng
yuanzhen_licheng 回复dundaoccce: 非常感谢您,初次接触matlab,6个多G,估计要研究几天。
接近 2 年之前 回复
dundaoccce
dundaoccce 回复yuanzhen_licheng: 当然可以生成txt文档,在matlab环境下有更方便的方式,用save命令生成mat文件;不过是否保存文件要看是否需要吧,80M的txt打开都费劲
接近 2 年之前 回复
dundaoccce
dundaoccce 回复yuanzhen_licheng: 你要生成字符串集合的话,就是一个字符串数组,约4M*20,第i行是字符串str(i:i+N-1]);
接近 2 年之前 回复
yuanzhen_licheng
yuanzhen_licheng 谢谢您,我先学习下试试
接近 2 年之前 回复

用MFC中的CString substring进行提取。

yuanzhen_licheng
yuanzhen_licheng 谢谢您,我先了解一下
接近 2 年之前 回复

CString 有下面几个函数
Mid Extracts the middle part of a string (like the Basic MID$ function).
Left Extracts the left part of a string (like the Basic LEFT$ function).
Right Extracts the right part of a string (like the Basic RIGHT$ function).
SpanIncluding Extracts a substring that contains only the characters in a set.
SpanExcluding Extracts a substring that contains only the characters not in a set.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!