Class
ModifiedStringAllows you to generate modified versions of a string in a non-inplace way.
Allows you to generate modified versions of a string in a non-inplace way.
Implements | ContainerConcept |
---|---|
All Subcl's | ModCyclicShapeModifiedString, ModReverseString, ModViewModifiedString |
All Impl'd | AssignableConcept, ContainerConcept, DestructibleConcept |
Defined in | <seqan/modifier.h> |
Signature |
template <typename THost[, typename TSpec]>
class ModifiedString;
|
Interface Function Overview
Interface Functions Inherited From AssignableConcept
Interface Functions Inherited From ContainerConcept
Interface Metafunction Overview
Interface Metafunctions Inherited From ContainerConcept
Detailed Description
THost can also be a modified string, so you can create nest modified strings to create custom combinations.
Examples
Using ModReverseString
#include <seqan/basic.h> #include <seqan/sequence.h> #include <seqan/stream.h> // for I/O #include <seqan/modifier.h> using namespace seqan; int main() { String<Dna> seq = "TATACGCGAAAA"; ModifiedString<String<Dna>, ModReverse> myModifier(seq); std::cout << seq << std::endl; std::cout << myModifier << std::endl; replace(seq, 8, 12, "TTTT"); std::cout << std::endl; std::cout << seq << std::endl; std::cout << myModifier << std::endl; return 0; }
The output is als follows:
TATACGCGAAAA AAAAGCGCATAT TATACGCGTTTT TTTTGCGCATAT
Using a custom functor for ModViewString
#include <iostream> #include <seqan/stream.h> #include <seqan/modifier.h> using namespace seqan; // A user-defined modifier that transforms all characters to upper case. struct MyFunctor : public std::unary_function<char, char> { inline char operator()(char x) const { if (('a' <= x) && (x <= 'z')) return x + ('A' - 'a'); return x; } }; int main() { // Construct a String and a ModifiedString over it. String<char> myString = "A man, a plan, a canal-Panama"; ModifiedString<String<char>, ModView<MyFunctor> > myModifier(myString); // Print the result and demonstrate that the changes to myString are also // visible through myModifier. std::cout << myString << "\n" << myModifier << "\n"; replace(myString, 9, 9, "master "); std::cout << myString << "\n" << myModifier << "\n"; return 0; }
The output is as follows:
A man, a plan, a canal-Panama A MAN, A PLAN, A CANAL-PANAMA A man, a master plan, a canal-Panama A MAN, A MASTER PLAN, A CANAL-PANAMA
Using nested modified strings.
#include <iostream> #include <seqan/modifier.h> #include <seqan/stream.h> using namespace seqan; int main() { // A nested modifier. typedef ModifiedString<String<Dna>, ModComplementDna> TMyComplement; typedef ModifiedString<TMyComplement, ModReverse> TMyReverseComplement; // The original string. String<Dna> myString = "attacgg"; // A reverse complemented string. TMyReverseComplement myReverseComplement(myString); std::cout << myString << "\n" << myReverseComplement << "\n"; replace(myString, 1, 1, "cgt"); std::cout << myString << "\n" << myReverseComplement << "\n" << DnaStringReverseComplement(myString) << "\n"; return 0; }
The output is as follows:
ATTACGG CCGTAAT ACGTTTACGG CCGTAAACGT CCGTAAACGT