我的程序是从字符串中删除一个字符,如何避免?

时间:2014-08-24 17:22:04

标签: c++ string

我有这个程序应该找到一个由3个字符组成的字符串,比如说“abc”到一个更长的字符串中说“aabccbd”,然后用另一个字符(比如'd')替换原来的字符串。所以。鉴于这些字符串,结果将是:

  1. aabcabcd
  2. adabcd <<-- another iteration
  3. addd <<-- Final result
  4. 我写了一些代码行我相信解决了替换给定序列的问题(仍然没有编写替换字符)。但问题是当我用给定的char替换序列时,序列之前的char被删除。 例如:

    1. aabcabcd
    2. dabcd <<-- Incorrect
    3. 可能出现什么问题?请检查我的代码。使用以下格式从.txt文件中读取序列:

      a b c d&lt; - 序列和交换字符。 (序列总是3个字符长) abcdefakxoqp333&lt; - 我应该搜索序列的完整字符串。

      Code:
      #include<stdio.h>
      #include<iostream>
      #include<stdlib.h>
      #include<string.h>
      using namespace std;
      char* gen = new char[3];
      char simp;
      char dna[10001];
      
      int main() {
          int len;
          //Reading file and assigning values.
          FILE *input = fopen("input.txt","rt");
          fscanf(input,"%c %c %c %c",&gen[0],&gen[1],&gen[2],&simp);
          fscanf(input,"%s",&dna);
          fclose(input);
          len = strlen(dna);
          //In this part dna has the 2nd line of input.txt
          for(int i=0;i<len;i++){
              cout << dna[i];
          }
          cout << endl;
          //Searching for coincidences.
      
          int dnaLen = len; //dna Lenght, this one will change over time.
          bool found=false;
          int index=0; //Index will be reseted as well when we make a change!!
          while(index<dnaLen-2) {
                  cout << "Entering WHILE with index=" << index << "\n";
                  cout << "Examining: " << dna[index] << dna[index+1] << dna[index+2] << endl;
              if(dna[index]=gen[0] && dna[index+1]==gen[1] && dna[index+2]==gen[2]){
                  //Replace dna[index] for simp AND displace the dna array
                  dna[index]=simp;
                  for(int i=0;i<dnaLen;i++){
                      cout << dna[i];
                  }
                  cout << endl;
                  index =0;
                  dnaLen=dnaLen-2;
              }
              index++;
          }
          return 0;
      }
      

      我知道我可以尝试使用正则表达式,问题是我对C ++ 11的使用有所限制。 我也知道我可以使用string::replace但是这段代码有什么问题?谢谢!

1 个答案:

答案 0 :(得分:2)

这不是比较,而是分配,将=替换为==

if(dna[index]=gen[0]...