21xrx.com
2024-12-22 22:39:06 Sunday
登录
文章检索 我的文章 写文章
如何在C++中使用中文输入和输出
2023-07-12 01:24:31 深夜i     --     --
C++ 中文输入 中文输出 Unicode 编码转换

在C++中,要想实现中文输入输出并不是很困难。下面介绍几种方法供大家参考。

一、使用字符串类型

可以使用字符串类型来进行中文输入输出。首先需要将字符集转换为UTF-8或者GBK。比如可以使用iconv库进行转换:


#include <iconv.h>

#include <string>

std::wstring utf8_to_wstring(const std::string& str) {

  std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;

  return conv.from_bytes(str);

}

std::string wstring_to_utf8(const std::wstring& str) {

  std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;

  return conv.to_bytes(str);

}

std::string gbk_to_utf8(const std::string& str) {

  std::string src_charset = "GBK";

  std::string dst_charset = "UTF-8";

  iconv_t cd = iconv_open(dst_charset.c_str(), src_charset.c_str());

  if (cd == (iconv_t)-1)

    return "";

  

  char* inbuf = const_cast<char*>(str.c_str());

  size_t inlen = str.length();

  size_t outlen = inlen * 2;

  char* outbuf = (char*)malloc(outlen);

  memset(outbuf, 0, outlen);

  char* inptr = inbuf;

  char* outptr = outbuf;

  size_t inbytesleft = inlen;

  size_t outbytesleft = outlen;

  size_t res = iconv(cd, &inptr, &inbytesleft, &outptr, &outbytesleft);

  if (res == (size_t)-1) {

    free(outbuf);

    return "";

  }

  std::string result(outbuf, outlen - outbytesleft);

  free(outbuf);

  iconv_close(cd);

  return result;

}

std::string utf8_to_gbk(const std::string& str) {

  std::string src_charset = "UTF-8";

  std::string dst_charset = "GBK";

  iconv_t cd = iconv_open(dst_charset.c_str(), src_charset.c_str());

  if (cd == (iconv_t)-1)

    return "";

  

  char* inbuf = const_cast<char*>(str.c_str());

  size_t inlen = str.length();

  size_t outlen = inlen * 2;

  char* outbuf = (char*)malloc(outlen);

  memset(outbuf, 0, outlen);

  char* inptr = inbuf;

  char* outptr = outbuf;

  size_t inbytesleft = inlen;

  size_t outbytesleft = outlen;

  size_t res = iconv(cd, &inptr, &inbytesleft, &outptr, &outbytesleft);

  if (res == (size_t)-1) {

    free(outbuf);

    return "";

  }

  std::string result(outbuf, outlen - outbytesleft);

  free(outbuf);

  iconv_close(cd);

  return result;

}

int main() {

  // 中文字符串

  std::wstring wstr = utf8_to_wstring(gbk_to_utf8("中文字符串"));

  // 输出中文字符串

  std::wcout.imbue(std::locale(""));

  std::wcout << wstr << std::endl;

  // 输入中文字符串

  std::wstring input;

  std::wcin.imbue(std::locale(""));

  std::getline(std::wcin, input);

  // 将输入的中文字符串转换为UTF-8编码

  std::string utf8_input = wstring_to_utf8(input);

  return 0;

}

二、使用Windows API

如果是在Windows平台上编写程序,可以使用Windows API中提供的函数进行中文输入输出。

输出中文字符串:


#include <Windows.h>

int main() {

  wprintf(L"中文字符串");

  return 0;

}

输入中文字符串:


#include <Windows.h>

int main() {

  wscanf_s(L"%ls", buf, sizeof(buf) / sizeof(wchar_t));

  return 0;

}

以上是两种在C++中实现中文输入输出的方法,可以根据程序需求进行选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复