我正在尝试将数组中的输入读入字符串,但效果不太好。这是我的密码。
std::string str1;
//for(int i = 0; grid[0][i].letter !=0; i++)
char ch1 = grid[0][0].letter;
char ch2 = grid[0][1].letter;
char ch3 = grid[0][2].letter;
char ch4 = grid[0][3].letter;
char ch5 = grid[0][4].letter;
char ch6 = grid[0][5].letter;
cout << ch1 << ch2 << ch3 << ch4 << ch5 << ch6;
str1 += ch1 + ch2 + ch3 + ch4 + ch5 + ch6;
cout << str1;早些时候,我将网格分别设置为等于字符e 'g‘g 'c’a‘t。当我把所有的字元印在一起的时候,它会像它应该的那样显示“茄子”。然而,由于某种原因,当我试图打印出str1 (它也应该显示“茄子”)时,它只给了我字母'k‘。我已经尝试了很长一段时间来解决这个问题,但我一点也没能解决。有人知道问题出在哪里吗?我只是#包括iostream,迭代器和算法,所以如果我只是忘记了#包括一些东西,请告诉我!
发布于 2014-04-22 18:24:12
在应用str1 += result_of_addition之前,您需要添加许多字符。
使:
str1 = str1 + ch1 + ch2 + ch3 + ch4 + ch5 + ch6操作char + char导致char -操作std::string + char导致std::string。运算符+=的优先级小于运算符+的优先级。因此,在将结果添加到字符串之前(在示例中)将添加所有字符。
发布于 2014-04-22 18:25:46
使用字符串:
#include <sstream>
stringstream ss;
ss << ch1 << ch2 << ch3 << ch4 << ch5 << ch6;
str1 = ss.str();发布于 2014-04-22 18:35:39
尝试以下几点
std::string str1;
str1.reserve( sizeof( grid[0] ) / sizeof( *grid[0] ) );
for ( const auto &cell : grid[0] ) str1.push_back( cell.letter );
cout << str1;上面的代码也可以写成
std::string str1;
str1.reserve( sizeof( grid[0] ) / sizeof( *grid[0] ) );
for ( const auto &cell : grid[0] ) str1 += cell.letter;
cout << str1;甚至是下面的方式
std::string str1;
str1.reserve( sizeof( grid[0] ) / sizeof( *grid[0] ) );
for ( char c : { grid[0][0].letter, grid[0][1].letter, grid[0][2].letter,
grid[0][3].letter, grid[0][4].letter, grid[0][5].letter } )
{
str1 += c;
}
cout << str1;或者您可以使用标准算法std::transform。
#include <algorithm>
//...
std::string str1;
str1.reserve( sizeof( grid[0] ) / sizeof( *grid[0] ) );
std::transform( std::begin( grid[0] ), std::end( grid[0] ), std::back_inserter( str1 ),
[]( decltype( *grid[0] ) &cell ) { return cell.letter; } );https://stackoverflow.com/questions/23227313
复制相似问题