我的代码采用字符串并显示偶数索引位置字母,然后在显示奇数索引字母的空格后显示。
就像我提供输入Hacker
一样,它应该给Hce akr
。
现在我的代码没有给我第二个输入的正确答案。
就像给出Rank
的第二个输入一样,它应该给Rn ak
。
而不是它提供了k
。这里它错过了R
。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void f(string a) {
string odd,even;
for(int i=0; a[i] != '\0'; i++) {
if(i % 2 == 0) {
even = even + a[i];
} else {
odd = odd + a[i];
}
}
cout << even << " " << odd << "\n";//<<<<<<I THINK THIS \n IS THE
//PROBLEM BUT I NEED THIS \n.I OBESERVED THAT ON REMOVING \n, CODES
// WORKS CORRECTLY.
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
string str;
int t;
cin >> t;
for(int i=0; i < t; i++) {
std::cin.ignore();
getline(cin, str);
f(str);
}
return 0;
}
答案 0 :(得分:3)
您应该将std::cin.ignore()
移到循环之外。
getline使用换行符,只是第一个输入离开它(cin>>t
)。
当您阅读例如一个int或一个char,输入后的换行符保留在输入流中。因此,现在执行getline只会读取换行符,并调用cin.ignore()
来使用换行符。但是每个getline()
消耗整行,包括换行符,所以你不必调用cin.ignore()
,如果你这样做,它默认会消耗一个字符,这里是'R'。 / p>
答案 1 :(得分:0)
cin.ignore()的默认设置是忽略一个字符。就像你的新系列一样。这是从循环的第二次迭代开始发生的。
此外,如果你想忽略更长的字符串,你必须为其添加额外的参数,可能是 cin.ignore(1000,'\ n'),最多跳过1000个字符或下一个字符换行(以先到者为准)。
希望这有帮助。