【问题标题】:C++ Split Wide Char StringC ++拆分宽字符字符串
【发布时间】:2013-09-29 13:28:40
【问题描述】:

我正在尝试将 WideChar 字符串拆分为一个数组,这是我这样做的方式:

WCHAR* Message = _T("This is a sample text"):
wchar_t *pwc;
CStringArray Command;
pwc = wcstok(Message, L" ");
int Count = 0;
while (pwc != NULL) {
    pwc = wcstok(NULL, L" ");
    Command.Add(pwc);
    Count++;
}

for (int i = 0 ; i <= Count ; i++)
{
    AfxMessageBox(Command[i]);
}

问题是我的最终结果数组中没有“This”
怎么了?

【问题讨论】:

  • 数组在哪里?你只是在打印令牌。
  • 为我工作(一旦我修复了在 Linux 环境中编译的代码,但那是 wcstok() 采用第三个参数来允许重入,不应该改变行为。你在说的“数组”,这让我觉得你在从字符串中复制元素时可能做错了什么?
  • 我正在向 CStringArray (CStringArray::Add) 添加令牌
  • 我已编辑问题并将代码更改为我当前使用的代码
  • 如果您运行您最初向我们展示的代码,您就会看到它在工作 - 这可能有助于您弄清楚为什么这个版本不能。

标签: c++ string-split


【解决方案1】:

在循环中分配给pwc 之前,您需要将调用移动到Command.Add - 就目前而言,在执行第一个Add 之前,您将转到第二个令牌。

【讨论】:

  • 感谢您的回答,我完成工作后需要delete pwc; 吗?
  • 没有。 (到那时无论如何它都会为空。)你没有new任何东西,所以delete什么都没有。
【解决方案2】:

我对您的来源没有任何问题。所有字符串组件都打印完美。

这是我的完整工作代码:

#include "stdafx.h"
#include <wchar.h>

int main(int argc, char *argv[])
{
    wchar_t wcs[] = L"This is a sample string";
    wchar_t *pwc;
    pwc = wcstok(wcs, L" ");
    while (pwc != NULL) {
        wprintf(L"%ls\n", pwc);
        pwc = wcstok(NULL, L" ");
    }
}

【讨论】:

  • 作为评论会更好 - 它并没有真正回答问题。 (感谢您不使用_T!)
  • 我同意,但我在这里没什么名声;)
  • 这里,免费声望。
猜你喜欢
  • 2017-06-16
  • 2011-02-13
  • 2011-11-25
  • 2021-05-08
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多