2016-12-29 67 views
2

Challenge:给定2个输入的字符串,输出三行:切换字母

  1. 在每个字符串的字符数,用空格隔开;
  2. 串连在一起;
  3. 将字符串放在一起,用空格分隔,并将两个字的第一个字母交换。

代码我公司生产的:

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    // Complete the program 
    string firstString, secondString; 
    cin>>firstString>>secondString; 
    cout<<firstString.length()<<" "<<secondString.length()<<"\n"; 
    cout<<firstString<<secondString<<"\n"; 
    string wierdString; 
    wierdString = secondString[0]; 
    for (int i = 1; i <= firstString.length(); i++) { 
     wierdString += firstString[i]; 
    } 
    wierdString = wierdString + " " + firstString[0]; 
    for (int j = 1; j <= secondString.length(); j++) { 
     wierdString += secondString[j]; 
    } 
    cout << wierdString; 
    return 0; 
} 

测试用例:

输入(stdin)
abcd ef
你的输出(stdout)
4 2
abcdef
ebcd af
期望输出
4 2
abcdef
ebcd af
编译消息
错误答案


对于我(作为初学者)来说,输出看起来就像预期的输出。我的代码有问题(using namespace std;除外)会导致此问题无效吗?我仍然是初学者,我想知道什么是错的。

+0

你可能正在输出一些更多(不可见的)字符的地方。检查换行符等 –

+0

@AlexanderTorstling我尝试了将预期的输出和收到的输出复制到Notepad ++中,并打开所有隐藏的字符。他们似乎匹配(每行结尾的CR/LF)。 –

+0

为什么所有的循环代码只是为了交换值?有'std :: swap'可以为你做到这一点。 'std :: swap(firstString [0],secondString [0]);' – PaulMcKenzie

回答

4

字符串s从0到s.length() - 1(含)索引。您正在迭代以下条件:i <= firstString.length()这意味着从字符串末尾读取。

+0

这是问题!谢谢! –

+0

获得的经验教训:不要相信记事本++ :)尝试类似'od'或'xxd'来转储文件内容。对于胜利,我只知道xvi32。 –

2

代码似乎工作正常,你也得到所需的输出。我认为没有什么可以出错 enter image description here

+0

您在第二个输出中有额外的空间。我没有。这个问题通过记住'.length'属性是0索引来解决 –