我试图将数组中的输入读入字符串,但它的工作效果不佳。这是我的代码。
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;
早些时候,我已将网格[0] [x]设置为等于字符&#39; e&#39; &#39;克&#39; &#39;克&#39; &#39; C&#39; &#39;一个&#39;分别是&#39; t&#39;当我打印所有ch chars彼此相邻时,它会显示&#34; eggcat&#34;,就像它应该的那样。但是,出于某种原因,当我尝试打印出str1时,它也应该显示&#34; eggcat&#34;,它只会给我一个字母&#39; k&#39;。我已经尝试了一段时间来解决这个问题,但我还没有能够解决这个问题。有谁知道问题可能是什么?我只是#include iostream,iterator和算法,所以如果我只是忘了#include的东西,请告诉我!
答案 0 :(得分:3)
在应用str1 + = result_of_addition之前添加了很多字符。
成功:
str1 = str1 + ch1 + ch2 + ch3 + ch4 + ch5 + ch6
操作char + char导致char - 操作std :: string + char导致std :: string。运算符+ =的优先级小于运算符+的优先级。因此,在将结果添加到字符串之前添加所有字符(在您的示例中)。
答案 1 :(得分:2)
使用字符串流:
#include <sstream>
stringstream ss;
ss << ch1 << ch2 << ch3 << ch4 << ch5 << ch6;
str1 = ss.str();
答案 2 :(得分:0)
您可以继续将char
添加到std::string
。
#include <string>
#include <iostream>
int main()
{
std::string str;
str += 'a';
str += 'b';
str += 'c';
str += 'd';
std::cout << str << std::endl;
};
输出
abcd
答案 3 :(得分:0)
尝试以下
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; } );