子串到数组中

时间:2013-12-11 21:15:56

标签: c++ arrays string substr

我有一个问题。 我想将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++;
}
}

1 个答案:

答案 0 :(得分:1)

首先,请注意,实际创建子字符串会创建一个由原始字符副本组成的子字符串。如果您现在想要s.substr(a, h).size() == h,那么最好测试s.size() <= a + h:这个表达式不会创建子字符串,只会比较几个整数。

您遗憾地省略了您拥有的实体的声明和类型,而且我对您使用的所有名称都不了解。但请注意,内部循环只会变化b而不会触及ai,即表达式

sek[i].sekencja.substr(a, h)

总是一样的(看着那个:是罗马尼亚语的“序列”吗?)。为什么你只看到你输入的尾巴,我不知道。