在vc中实现获取汉字拼音的首字母(转载)

 

  1. /*
  2.  * Syntax
  3.  *        void FirstLetter(int nCode, CString& strLetter)
  4.  * Remarks:
  5.  *        Get the first letter of pinyin according to specified Chinese character code.
  6.  * Parameters:
  7.  *        nCode         - the code of the chinese character.
  8.  *        strLetter      - a CString object that is to receive the string of the first letter.
  9.  * Return Values:
  10.  *        None.
  11.  */
  12. void FirstLetter(int nCode, CString& strLetter)
  13. {
  14.    if(nCode >= 1601 && nCode < 1637) strLetter = _T("A");
  15.    if(nCode >= 1637 && nCode < 1833) strLetter = _T("B");
  16.    if(nCode >= 1833 && nCode < 2078) strLetter = _T("C");
  17.    if(nCode >= 2078 && nCode < 2274) strLetter = _T("D");
  18.    if(nCode >= 2274 && nCode < 2302) strLetter = _T("E");
  19.    if(nCode >= 2302 && nCode < 2433) strLetter = _T("F");
  20.    if(nCode >= 2433 && nCode < 2594) strLetter = _T("G");
  21.    if(nCode >= 2594 && nCode < 2787) strLetter = _T("H");
  22.    if(nCode >= 2787 && nCode < 3106) strLetter = _T("J");
  23.    if(nCode >= 3106 && nCode < 3212) strLetter = _T("K");
  24.    if(nCode >= 3212 && nCode < 3472) strLetter = _T("L");
  25.    if(nCode >= 3472 && nCode < 3635) strLetter = _T("M");
  26.    if(nCode >= 3635 && nCode < 3722) strLetter = _T("N");
  27.    if(nCode >= 3722 && nCode < 3730) strLetter = _T("O");
  28.    if(nCode >= 3730 && nCode < 3858) strLetter = _T("P");
  29.    if(nCode >= 3858 && nCode < 4027) strLetter = _T("Q");
  30.    if(nCode >= 4027 && nCode < 4086) strLetter = _T("R");
  31.    if(nCode >= 4086 && nCode < 4390) strLetter = _T("S");
  32.    if(nCode >= 4390 && nCode < 4558) strLetter = _T("T");
  33.    if(nCode >= 4558 && nCode < 4684) strLetter = _T("W");
  34.    if(nCode >= 4684 && nCode < 4925) strLetter = _T("X");
  35.    if(nCode >= 4925 && nCode < 5249) strLetter = _T("Y");
  36.    if(nCode >= 5249 && nCode < 5590) strLetter = _T("Z");
  37. }
  38. /**
  39.  * Syntax
  40.  *        GetFirstLetter(CString strName, CString& strFirstLetter)
  41.  * Remarks:
  42.  *        Get the first letter of pinyin according to specified Chinese character.
  43.  * Parameters:
  44.  *        strName            - a CString object that is to be parsed.
  45.  *        strFirstLetter     - a CString object that is to receive the string of the first letter.
  46.  * Return Values:
  47.  *        None.
  48.  */
  49. void GetFirstLetter(CString strName, CString& strFirstLetter)
  50. {
  51.     TBYTE ucHigh, ucLow;
  52.     int  nCode;
  53.     CString strRet;
  54.     strFirstLetter.Empty();
  55.     for (int i=0; i<strName.GetLength(); i++)
  56.     {
  57.         if ( (TBYTE)strName[i] < 0x80 )
  58.             continue;
  59.         ucHigh = (TBYTE)strName[i];
  60.         ucLow  = (TBYTE)strName[i+1];
  61.         if ( ucHigh < 0xa1 || ucLow < 0xa1)
  62.             continue;
  63.         else
  64.             // Treat code by section-position as an int type parameter,
  65.             // so make following change to nCode.
  66.             nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;
  67.         FirstLetter(nCode, strRet);
  68.         strFirstLetter += strRet;
  69.         i++;
  70.     }
  71. }

How to use:

    CString strName, strRes;
    strName = _T("A汉字");
    GetFirstLetter(strName, strRes);
    //Then the value of strRes is "HZ".

 

仅供参考,未验证是什么状态下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC 实现 HTTP 的 POST 方式上传文件并获取返回值,可以通过以下步骤实现: 1. 引用 WinINet 库 在 VC 项目,需要引用 WinINet 库,可以通过以下步骤添加: 在 Solution Explorer ,右键单击项目,选择 Properties。 在 Property Pages 对话框,选择 Configuration Properties -> Linker -> Input。 在 Additional Dependencies 添加 WinINet.lib。 2. 创建 HTTP 连接 使用 InternetOpen 函数创建 HTTP 连接,该函数返回一个 HINTERNET 句柄,用于后续操作: ``` HINTERNET hInternet = InternetOpen(_T("MyApp"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); ``` 其,第一个参数是应用程序名称,第二个参数指定连接类型,第三个和第四个参数分别为代理服务器的名称和端口号,最后一个参数为可选的标志,如果为 0,则使用默认标志。 3. 创建 HTTP 请求 使用 HttpOpenRequest 函数创建 HTTP 请求,该函数需要传入上一步创建的 HINTERNET 句柄,返回一个 HINTERNET 句柄,用于后续操作: ``` HINTERNET hHttp = HttpOpenRequest(hInternet, _T("POST"), _T("/upload.php"), NULL, NULL, NULL, INTERNET_FLAG_RELOAD, 0); ``` 其,第一个参数为上一步创建的 HINTERNET 句柄,第二个参数指定请求方法,这里使用 POST 方法,第三个参数为上传文件的路径,第四个和第五个参数分别为 HTTP 请求头和请求头的长度,最后一个参数为可选的标志,这里使用 INTERNET_FLAG_RELOAD 标志,表示每次请求都从服务器获取最新的内容。 4. 添加 HTTP 请求头 使用 HttpAddRequestHeaders 函数添加 HTTP 请求头,这里需要添加 Content-Type 和 Content-Length 请求头: ``` TCHAR szContentType[] = _T("Content-Type: multipart/form-data; boundary=***"); HttpAddRequestHeaders(hHttp, szContentType, _tcslen(szContentType), HTTP_ADDREQ_FLAG_ADD); TCHAR szContentLength[256]; sprintf_s(szContentLength, _T("Content-Length: %d"), dwTotalSize); HttpAddRequestHeaders(hHttp, szContentLength, strlen(szContentLength), HTTP_ADDREQ_FLAG_ADD); ``` 其,第一个参数为上一步创建的 HINTERNET 句柄,第二个参数为请求头的内容,第三个参数为请求头的长度,最后一个参数为可选的标志,这里使用 HTTP_ADDREQ_FLAG_ADD 标志,表示添加请求头而不是替换。 5. 构建 HTTP 请求正文 使用 HttpSendRequest 函数发送 HTTP 请求,这里需要构建 HTTP 请求正文,即上传文件的数据,可以使用 multipart/form-data 格式,该格式需要指定一个分隔符,每个字段都以分隔符开始,以分隔符结束,字段名和字段值之间用两个换行符分隔,文件数据需要以二进制方式传输,每个文件以分隔符开始,以分隔符结束,文件名和文件数据之间用两个换行符分隔。 ``` TCHAR szBoundary[] = _T("***"); TCHAR szHeader[1024]; sprintf_s(szHeader, _T("--%s\r\nContent-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\nContent-Type: application/octet-stream\r\n\r\n"), szBoundary, szFileName); DWORD dwHeaderSize = strlen(szHeader); TCHAR szFooter[1024]; sprintf_s(szFooter, _T("\r\n--%s--\r\n"), szBoundary); DWORD dwFooterSize = strlen(szFooter); DWORD dwTotalSize = dwHeaderSize + dwFileSize + dwFooterSize; HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwTotalSize); LPBYTE pBuffer = (LPBYTE)GlobalLock(hGlobal); memcpy(pBuffer, szHeader, dwHeaderSize); pBuffer += dwHeaderSize; DWORD dwBytesRead; ReadFile(hFile, pBuffer, dwFileSize, &dwBytesRead, NULL); pBuffer += dwBytesRead; memcpy(pBuffer, szFooter, dwFooterSize); pBuffer += dwFooterSize; GlobalUnlock(hGlobal); HttpSendRequest(hHttp, szContentType, _tcslen(szContentType), hGlobal, dwTotalSize); ``` 其,第一个参数为上一步创建的 HINTERNET 句柄,第二个参数为请求头的内容,第三个参数为请求头的长度,第四个参数为上传文件的数据,第五个参数为上传文件的数据长度。 6. 获取 HTTP 响应 使用 InternetReadFile 函数获取 HTTP 响应,这里需要读取 HTTP 响应正文,即服务器返回的数据: ``` BYTE szBuffer[1024]; DWORD dwBytesRead; while (InternetReadFile(hHttp, szBuffer, sizeof(szBuffer), &dwBytesRead) && dwBytesRead > 0) { // 处理读取到的数据 } ``` 其,第一个参数为上一步创建的 HINTERNET 句柄,第二个参数为读取数据的缓冲区,第三个参数为缓冲区的长度,第四个参数为读取到的数据长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值