我有一个字符串,我需要在字母不断移动的同时从头开始减去。例如:
ABC DEF GHI JK需要看起来像这样 BCD EFG HIJ K然后 CDE FGH IJK
我有一些代码,但这些字母没有单独移动:
int main()
{
string code, default_Code;
default_Code = "TCAATGTAACGCGCTACCCGGAGCTCTGGGCCCAAATTTCATCCACT";
start_C = "AUG";
code.reserve(100);
int i = 0, a = 0, c =0;
char choice;
for (int j = 3; j < code.length(); j += 4) // Creating space between 3 letters
{
code.insert(j, 1, ' ');
}
do {
i = 0;
do { // Looping to create an open reading frame.
for (int b = 0; b*3 < code.length(); b++) { // moving through the code
for (int a = 0; a < 3; a++) {
cout << code[(a + b*3) + i];
}
}
i++;
cout << endl;
} while (i < 3);
reverse(code.rbegin(), code.rend()); // Reversing to create the second set reading frame.
c++;
cout << endl;
} while (c < 2);
return 0;
}
答案 0 :(得分:0)
不是从字符串中删除第一个字符,而是简单地遍历字符串中的起始位置。
答案 1 :(得分:0)
你应该看看: http://www.cplusplus.com/reference/string/string/substr/
从字符串对象中提取某些部分。
将字符串保留在一个变量中,将格式化的输出字符串保留在另一个变量中。
元代码:
std :: string value =“ABCDEFG” std :: string output;
value = value.substr(2,value.size() - 3);
//创建输出 输出=值..等..
答案 2 :(得分:0)
你的代码不打印任何东西,因为你正在处理code
,但你实际上从未将该变量设置为除空字符串之外的任何内容。我认为这只是因为您发布的代码是根据您实际使用的代码进行修改的。
我建议采用不同的方法。
编写一个带有输入字符串的函数,并返回插入了空格的数据。然后重复调用该函数并删除初始字符。
这是一个打印出您的字符串的程序,该字符串分为三个字母组,删除每个打印行后的第一个字母,直到没有打印出来。
void print_with_spaces(string::const_iterator begin,string::const_iterator end) {
int i=0;
while(begin!=end) {
cout << *begin++;
if(++i % 3 == 0)
cout << ' ';
}
cout << '\n';
}
int main() {
string code = "TCAATGTAACGCGCTACCCGGAGCTCTGGGCCCAAATTTCATCCACT";
string::const_iterator i = code.begin();
while(i!=code.end())
print_with_spaces(i++,code.end());
}
答案 3 :(得分:0)
如果你真的想把空格字符放入字符串中,而不是只是将它们插入输出中,你可以这样做:
std::string code("TCAATGTAACGCGCTACCCGGAGCTCTGGGCCCAAATTTCATCCACT");
// a repeating pattern of offsets
int x[4] = { 1, 1, 2, 0 };
for (size_t i = 3; i < code.length(); i +=4)
{
code.insert(i, 1, ' ');
}
while (code.length() > 0)
{
printf("%s\n", code.c_str());
for (size_t i = 0; i < code.length() - 1; i++)
{
// new char is either 1, 2, or 0 bytes ahead
size_t j = i + x[i % 4];
// in case it's 2 bytes at the end, just get the last
code[i] = code[j < code.length() ? j : j - 1];
}
// and throw away the leftover at the end
code.resize(code.length() - 1);
}
编辑&gt;回复以下评论:
如果您尝试在printf语句之前插入此代码...
size_t t = code.find("ATC");
if (t != std::string::npos)
{
code.replace(t, 3, " M ");
}
...你会看到code.find(“ATC”)不找到“A TC”或“AT C”。直到第三行输出时才会找到它,当字符串中出现“ATC”时,字母之间没有任何空格。我有空格插入实际的字符串数据,就像你的原始代码一样。