0

这适用于使用 C++ 和 FLTK 的 GUI。

假设我有一个string x = "ABCDEFG"和一个盒子数组y[7]

我想使用 for 循环将其中一个字母作为标签放在盒子上,例如:

for (int i=0; i<7; i++) {   
  y[i] = new Fl_Box(120+31*i,40,30,30,"A");
}

但不是所有的“A”,当然我想要“A” on y[0],“B” on y[1],“C” ony[2]等等 - 从字符串中调用的字母作为元素x[i]

我尝试简单地使用x[0],等,发现它需要转换为 char。

然后我尝试&x[0]发现它只是在每个字符串上打印整个字符串作为它的 const char。

4

2 回答 2

1

假设FL_Box需要 C 字符串样式(以空结尾),请考虑使用临时值。

std::string(x[i], 1).c_str()

这类似于通过

char temp[2] = { 0 };
temp[0] = x[i];

和传递temp

于 2013-11-06T05:20:58.727 回答
1

你可以使用类似的substr()方法std::string

for (int i=0; i<7; i++) {   
  y[i] = new Fl_Box(120+31*i,40,30,30, x.substr(i, 1).c_str());
}

这是 的签名substr()

string substr (size_t pos = 0, size_t len = npos) const;

这是一个快速测试程序及其输出。

#include <stdio.h>
#include <string>
int main(int argc, char *argv[])
{
    std::string x = "ABCDEFG";
    for (int i = 0; i < 7; ++i) {
        printf("i(%d) c(%s)\n", i, x.substr(i, 1).c_str());
    }
    return 0;
}

# ./a.out
i(0) c(A)
i(1) c(B)
i(2) c(C)
i(3) c(D)
i(4) c(E)
i(5) c(F)
i(6) c(G)
于 2013-11-06T05:21:54.323 回答