0

我是 C++ 新手,正在 Visual Studio 中开发一个相对雄心勃勃的 Win32 应用程序。我遇到的问题是,当从字符串“写入”时,主窗口中的文本字段显示的是数字而不是字母。

我正在将矢量读入富文本框,但文本框显示的不是 AA,而是 6565。我知道 65 是“A”的字符代码,但无法找到如何获取窗口显示字母。

这是创建向量的代码。调试这块显示数据正确加载。这段代码是“投资组合”类的一部分。

vector<string> tickers;
string cell;
string line;

ifstream d ("file.csv"); //The file contents look like: AA,AAPL,BAC and so on

if (d.is_open()) {

    getline(d,line);
    stringstream line2(line);

    for (ci=0; ci<c; ci++) { //c is known and is the number of 'columns' in the file I am reading.
      getline(line2,cell,',');
      tickers.push_back(cell);
    }
}

富文本框的名称是“Results2”。设置富文本框的Text属性的代码是:

portfolio p;
int n = p.tickers.size();

for (int i=0; i<n; i++) {
    for (int j=0; j<p.tickers[i].size(); j++) {
        Results2->Text += p.tickers[i][j];
    }
    Results2->Text += "\n";
}

我知道“Results2->Text”位是正确的,因为数据到达那里就好了。问题是,我最终得到:

6565 65658076

代替:

AA AAPL

我究竟做错了什么?

提前感谢您的帮助!

4

1 回答 1

0

您正在操作的 C++/STL 字符串与 RichTextBox 正在使用的 C++/CLI 字符串之间可能存在编组问题。

编辑

问题是您将字符一个接一个地放在 中RichTextBox::Text,或者该字段需要 a System::String,因此它将每个字符作为整数值转换为 a String,然后再将其放入文本框中,这就是为什么您得到 ASCII 数字而不是字符串的原因。

由于portfolio::tickersis a vector<std::string>正如您在评论中指定的那样,您可以在将其提供给之前将每个转换std::string为 a :char*RichTextBox::Text

portfolio p;
for (int i=0; i<p.tickers.size(); i++) {
    Results2->Text += gcnew String(p.tickers[i].c_str());
    Results2->Text += "\n";
}

你也可以使用marshal_asVC2008 中介绍的:

Results2->Text += marshal_as<String^>(p.tickers[i].c_str());
于 2013-04-17T09:00:26.507 回答