【发布时间】:2020-05-17 16:26:44
【问题描述】:
我的目标是解决这个问题:
给定一个长度为 N 且索引从 0 到 N-1 的字符串 S,将其偶数索引字符和奇数索引字符作为 2 个空格分隔的字符串打印在一行上
int main() {
int test;
cin>>test;
for(int j = 0; j < test; j++){
char str[10000];
cin.ignore();
cin.getline(str,9999);
for( int i = 0; i < strlen(str); i++)
{
if(i % 2 == 0)
cout<<str[i];
}
cout <<" ";
for(int i = 0; i < strlen(str); i++)
{
if((i % 2 != 0))
cout<<str[i];
}
cout << endl;
}
return 0;
}
上面的代码给我的输出是:
赫赛克 知道对于给定的输入:
2 黑客 秩但是当我使用cin>>str 而不是cin.ignore() 和cin.getline() 时,我得到了正确的预期输出:这对结果有何影响?
【问题讨论】:
-
我的经验法则是
ignore在流中留下不需要的字符的操作之后。几乎每次您将忽略放在另一个操作之前,您都会后悔。 -
我的经验法则是,如果你必须使用
cin.ignore(),那么你在阅读cin的方式非常糟糕。一般来说,如果您将cin >> <whatever>与cin.getline()混合使用,您会遇到问题,因为它们处理输入的某些方面(换行符、错误条件)不同,因此它们以不需要的方式交互。cin.ignore()可以掩盖这些错误,但是,如果您以混合方式阅读更多输入,那也会变得困难。尝试使用getline()从cin读取 所有内容 - 并根据需要解析行 - 而不是一起使用cin >> ...和cin.getline()。 -
问题未明确。不清楚首先要从输入中读取字符串;任务可能只是提供一个获取字符串的函数并以指定的方式打印两个结果字符串。字符串 S(请注意,赋值不是说“单词”!)可以包含空格吗?如果没有,只需使用 operator>>(string) 从输入中读取单词。不需要getline,根本不需要忽略。如果是:我们需要一个结束标记。如果这是一个换行符,您只需使用 getline 读取,但在读取第一个数字后您需要一个忽略。
-
顺便说一句:赞成(1)用合理的代码展示自己的重大努力,实际上是一个独立的最小示例。如果可以的话,我会给你三个赞成票。 (2) 说明预期结果; (3) 说明实际结果。瞧:你会得到有用的答案。