gpt4 book ai didi

C++ 正在混合我的字符串?

转载 作者:行者123 更新时间:2023-11-30 02:05:55 25 4
gpt4 key购买 nike

我有自己编写的这个非常简单的 C++ 函数。
它应该只是从我的字符串中删除“-”字符。
这是代码

char* FastaManager::stripAlignment(char *seq, int seqLength){
char newSeq[seqLength];
int j=0;
for (int i=0; i<seqLength; i++) {
if (seq[i] != '-') {
newSeq[j++]=seq[i];
}
}

char *retSeq = (char*)malloc((--j)*sizeof(char));
for (int i=0; i<j; i++) {
retSeq[i]=newSeq[i];
}
retSeq[j+1]='\0'; //WTF it keeps reading from memory without this
return retSeq;
}

我认为评论不言自明。
我不知道为什么,但是当我启动程序并打印出结果时,我得到类似

的内容

'stripped_sequence''original_sequence'

但是,如果我尝试调试代码以查看是否有任何错误,流程会进行得恰到好处,并最终返回正确的剥离序列。

我试着打印出这两个变量的内存,这里是内存读数

seq 的内存:http://i.stack.imgur.com/dHI8k.png

*seq 的内存:http://i.stack.imgur.com/UqVkX.png

retSeq 的内存:http://i.stack.imgur.com/o9uvI.png

*retSeq 的内存:http://i.stack.imgur.com/ioFsu.png

(由于垃圾邮件过滤器,无法包含链接/图片,抱歉)

这是我用来打印字符串的代码

for (int i=0; i<atoi(argv[2]); i++) {
char *seq;
if (usingStructure) {
seq = fm.generateSequenceWithStructure(structure);
}else{
seq = fm.generateSequenceFromProfile();
}
cout<<">Sequence "<<i+1<<": "<<seq<<endl;
}

现在,我真的不知道发生了什么。

最佳答案

如果你可以使用 std::string,只需这样做:

std::string FastaManager::stripAlignment(const std::string& str)
{
std::string result(str);
result.erase(std::remove(result.begin(), result.end(), '-'), result.end());
return result;
}

这叫做“erase-remove idiom”。

关于C++ 正在混合我的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com