从字符创建字符串

时间:2014-04-22 18:20:30

标签: c++

我试图将数组中的输入读入字符串,但它的工作效果不佳。这是我的代码。

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的东西,请告诉我!

4 个答案:

答案 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; } );