Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- class DNA{
- private:
- struct lanac{
- int pos;
- string lanac;
- };
- vector<lanac> molekula;
- int size;
- public:
- void print(std::ostream& o) const{
- for(auto it=molekula.begin(); it!=molekula.end(); ++it){
- o << it->pos << "-" << it->pos+(it->lanac).size()<< " " << it->lanac << "\n";
- }
- o << "\n";
- }
- string toString() const {
- string str;
- for(auto i=0; i<molekula.size(); ++i){
- if(i>=1){
- if( (molekula[i].pos-1) > (molekula[i-1].pos+molekula[i-1].lanac.size()) ) str+=string(((molekula[i].pos) - (molekula[i-1].pos+molekula[i-1].lanac.size())),'x');
- }
- str+=molekula[i].lanac;
- }
- return str;
- }
- void print(std::ostream& o, int p, int len) const{
- string str=toString();
- o << p << "-" << len << " ";
- for(auto j=p; j<len; ++j)
- if(str[j]!='x') o << str[j];
- }
- void insert(int pos, std::string l){
- // molekula.push_back(lanac{pos, l});
- string stringToChange = toString();
- int size = stringToChange.size();
- molekula.clear();
- if(pos >= size) {
- stringToChange += string((pos-stringToChange.size()), 'x');
- stringToChange += l;
- } else {
- for (int i = pos, j = 0; j < l.size(); ++i, ++j) {
- if (i < size) {
- stringToChange[i] = l[j];
- } else {
- stringToChange.push_back(l[j]);
- }
- }
- }
- toMolekula(stringToChange);
- }
- void toMolekula(string& lanacToChange) {
- for (int i = 0; i < lanacToChange.size(); ++i) {
- if (lanacToChange[i] != 'x') {
- string noviLanac = "";
- int position = i;
- while(lanacToChange[i] != 'x' && i < lanacToChange.size()) {
- noviLanac += lanacToChange[i++];
- }
- molekula.push_back(lanac{position, noviLanac});
- }
- }
- }
- int remove(int pos, int len) {
- string lanacToChange = toString();
- if (pos >= lanacToChange.size()) {
- return 0;
- }
- int ret_number = 0;
- for (int i = pos; i <= len; ++i) {
- if (lanacToChange[i] != 'x') {
- lanacToChange[i] = 'x';
- ++ret_number;
- }
- }
- molekula.clear();
- toMolekula(lanacToChange);
- return ret_number;
- }
- };
- int main(){
- DNA mol;
- mol.insert(0,"ATCG");
- mol.insert(8, "TGCA");
- mol.print(std::cout);
- mol.insert(10, "TTTT");
- mol.remove(1, 2);
- mol.print(cout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement