首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何填充字符串的可变长度数组

如何填充字符串的可变长度数组
EN

Stack Overflow用户
提问于 2014-02-13 21:30:17
回答 5查看 959关注 0票数 0

因此,在javascript(coffeescript)中,我有如下代码:

代码语言:javascript
复制
"BRIGHT":
  min: 1
  max: 4
  step: 1
  value: 3

bluetooth:
  options: [ 'off', 'on' ]  # SOMETIMES I NEED ARRAY
  callback: ->
    rangeFinder.bluetooth = rangeFinder.getSetting().value

mode:
  options: [ 'basic', 'advanced', 'config' ] # OF DIFFERENT LENGTHS
  callback: ->
    rangeFinder.lastMode = rangeFinder.getSetting().value

我如何在c++中做这样的事情?

我有一个与亮度相似的3个物体阵列

代码语言:javascript
复制
#include "setting.cpp"

class GlobalMenu {

  public:

    MenuSetting settings[3];
    int setting;
    GlobalMenu();

};

GlobalMenu::GlobalMenu(void){

  // What is the currently selected setting?
  this -> setting = 0;

  this -> settings[0].name = "BRIGHT";
  this -> settings[0].min = 1;
  this -> settings[0].max = 4;
  this -> settings[0].step = 1;
  this -> settings[0].value = 3;

  this -> settings[1].name = "BLUETOOTH";
  // HOW DO I GET VARIABLE LENGTH ARRAYS HERE?

}

setting.cpp

代码语言:javascript
复制
class MenuSetting {

  public:

    char *name;
    int min;
    char options[][5];
    int max;
    int step;
    int value;

};

在其他地方,这段代码会更改设置(并且工作)

代码语言:javascript
复制
void RangeFinder::changeSetting(int dir) {

  this -> data.global.settings[this -> data.global.setting].value +=
    (dir ? 1 : -1) *
    this -> data.global.settings[this -> data.global.setting].step;

  this -> enforceMinMax();

  this -> render();
}

另外,如果你能找到一种方法来清理它,那会有帮助的。

因此,我可能会知道如何检测选项是否有长度,但在将任意数量的选项分配到options数组中时,我遇到了问题。

解决方案不能使用STD.

据我所知,atmega32微控制器不能使用std .

EN

回答 5

Stack Overflow用户

发布于 2014-02-13 21:36:40

在C++中,处理可变大小数组的规范方法是使用vector

代码语言:javascript
复制
std::vector<std::string> options;

options.push_back("First option");
options.push_back("Second option");
options.push_back("Third option");

然后您可以使用options.size()来知道有多少个元素。

在开始使用这门语言之前,你也可以通过从一个封面读到另一个封面来帮助你自己。由于几个原因,C++不是通过实验学习的合适语言,最重要的是:

  1. 有时候C++是不合逻辑的(因为它的历史),不管你有多聪明,你都无法猜测历史。你得好好研究一下。
  2. 当您犯错误时,您不能指望语言来帮助您(没有运行时错误天使,只有未定义的行为守护进程)。
票数 3
EN

Stack Overflow用户

发布于 2014-02-13 21:36:36

避免陷入几个陷阱的最佳选择是:

  1. 使用std::string代替字符指针和缓冲区
  2. 使用std::向量而不是编译器大小的数组。

这将使您的课堂看起来像:

代码语言:javascript
复制
class MenuSetting 
{
public:
    std::string name;
    int min;
    std::vector<std::string> options;
    int max;
    int step;
    int value;
};

您可以找到关于std::stringstd::vector的各种操作的详细信息。

票数 0
EN

Stack Overflow用户

发布于 2014-02-14 17:49:12

不可能..。答案是创建case语句和更多的硬代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21765895

复制
相关文章

相似问题

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