2012-08-06 102 views
1

我忙于实际操作。我必须输入一个字符串或消息,并且必须将其转换为莫尔斯电码: 'A'= .- 'B'= -... ecs。在字符串中显示空格

我可以做到这一点没有问题,通过使用一系列的if语句。

for(int i = 0;i < stringvalue.length();i++) 
{ 
    if(stringvalue == 'A') 
     cout << ".-"; 
     //there is 26 if statements 

} 

但是,当我输入一个字符串,例如。

"Testing data" 

只将字符串的第一部分转换(测试转换)为莫尔斯。

为什么它不转换空间后的部分。如果字符串中有空格,则必须输出“/”。

+0

使用'CIN >>'将打破在空间。而是使用'getline'代替:http://en.cppreference.com/w/cpp/string/basic_string/getline – BoBTFish 2012-08-06 09:28:15

+0

此外,不是使用26'if's,也许你可以使用莫尔斯表(数组)代码值,并查找表中的每个字母。 – BoBTFish 2012-08-06 09:35:18

回答

3

如果输入程序是这样的:

std::string input; 
std::cin >> input; 

输入被读取到第一个空格字符。要阅读整行,您可以使用std::getline

std::getline(std::cin, input); 
+0

谢谢你的帮助。我会在10分钟内接受你的回答。 – 2012-08-06 09:30:54

+0

@JonathanGeers:你很受欢迎。 – jxh 2012-08-06 09:38:14

2

因为你从stdin使用cin >> stringvalue阅读的字符串。 C++ operator>>(istream, string)在空白符后停止;它每次只读取一个由空格分隔的令牌。

相反,使用getline

std::getline(std::cin, stringvalue);