我有一个问题。 我想将substr函数的结果插入到数组中,但是它不是从开始到结尾读取我的字符串,但它省略了它的大部分并在结束时开始读取。并且它没有正确地将reult放入数组中 - 每个数组单元格都包含相同的子字符串 我正在使用结构。这是我的代码的一部分,输入看起来像:
TTGATTCTATGGAGGGATGCTGGCAAGGCTCCGGAAGCAGCATCAGCAATTAAAAAATTACTGGACCTGATCTT
代码
struct sekwencja
struct sekwencja
{
string sekwencja;
string etykieta[10000];
int jakosc[200];
int dlugosc;
string idf;
string idq;
}sek[100];
(...)
sek[i].dlugosc=sek[i].sekwencja.length();
(...)
cout<<"give the length of substring"<<endl;
cin>>h;
for (int i=0;i<7;i++)
{
for (int a=1; a<sek[i].dlugosc-1; a++)
{
if(sek[i].sekwencja.substr(a,h).length()==h){
for(int b=0;b<sek[i].dlugosc-1+h;b++)
{
sek[i].etykieta[b]=sek[i].sekwencja.substr(a,h);
}
}
}
}
我非常感谢你的帮助!
编辑:
我不知道为什么我可以做这样的事情:
int b=0;
string etykieta [1000];
for (int i=0;i<7;i++)
{
for(int a=0;a<sek[i].dlugosc;a++)
{
etykieta[b]=sek[i].sekwencja.substr(a,h);
b++;
}
}
但不喜欢这个
int b=0;
string etykieta [1000];
for (int i=0;i<7;i++)
{
for(int a=0;a<sek[i].dlugosc;a++)
{
sek[i].etykieta[b]=sek[i].sekwencja.substr(a,h);
b++;
}
}
答案 0 :(得分:1)
首先,请注意,实际创建子字符串会创建一个由原始字符副本组成的子字符串。如果您现在想要s.substr(a, h).size() == h
,那么最好测试s.size() <= a + h
:这个表达式不会创建子字符串,只会比较几个整数。
您遗憾地省略了您拥有的实体的声明和类型,而且我对您使用的所有名称都不了解。但请注意,内部循环只会变化b
而不会触及a
或i
,即表达式
sek[i].sekencja.substr(a, h)
总是一样的(看着那个:是罗马尼亚语的“序列”吗?)。为什么你只看到你输入的尾巴,我不知道。