首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从chars创建字符串

从chars创建字符串
EN

Stack Overflow用户
提问于 2014-04-22 18:20:30
回答 3查看 121关注 0票数 1

我正在尝试将数组中的输入读入字符串,但效果不太好。这是我的密码。

代码语言:javascript
复制
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,迭代器和算法,所以如果我只是忘记了#包括一些东西,请告诉我!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-22 18:24:12

在应用str1 += result_of_addition之前,您需要添加许多字符。

使:

代码语言:javascript
复制
str1 = str1 + ch1 + ch2 + ch3 + ch4 + ch5 + ch6

操作char + char导致char -操作std::string + char导致std::string。运算符+=的优先级小于运算符+的优先级。因此,在将结果添加到字符串之前(在示例中)将添加所有字符。

票数 3
EN

Stack Overflow用户

发布于 2014-04-22 18:25:46

使用字符串:

代码语言:javascript
复制
#include <sstream>

stringstream ss;
ss << ch1 << ch2 << ch3 << ch4 << ch5 << ch6;
str1 = ss.str();
票数 2
EN

Stack Overflow用户

发布于 2014-04-22 18:35:39

尝试以下几点

代码语言:javascript
复制
std::string str1;
str1.reserve( sizeof( grid[0] ) / sizeof( *grid[0] ) );

for ( const auto &cell : grid[0] ) str1.push_back( cell.letter ); 
cout << str1;

上面的代码也可以写成

代码语言:javascript
复制
std::string str1;
str1.reserve( sizeof( grid[0] ) / sizeof( *grid[0] ) );

for ( const auto &cell : grid[0] ) str1 += cell.letter; 
cout << str1;

甚至是下面的方式

代码语言:javascript
复制
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

代码语言:javascript
复制
#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; } );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23227313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档