中英文混合字符截取

用perl截取字符串,字符串中含有中文、英文、数字和各种符号,也包含中文标点符号,截取一定数量的字符,并且截取之后中文是完整的,不会出现乱码或问号。
sub makelen($$)
  {
   my($sstr,$slen)=@_;
   my $makelen,$parity;
   $mslen=length($sstr);
   if($mslen>$slen)
     {
         for($mn=0;$mn<$slen;$mn++) #在要求的长度内
           {
            $ss=substr($sstr,$mn,1);
            if(ord($ss)<127) #为英文
              {
                  $parity+=1;
              }
           }
          if($parity%2==1) #含英文长度为奇数
           {
            if($slen%2==1) #如果所要求的长度也为奇数
                         {
                          $tmpstr=substr($sstr,0,$slen);
                     }
                   else #所要求的长度为偶数
                     {
                      $tmpstr=substr($sstr,0,$slen-1);
                     }
           }
         else #含英文长度为偶数或者为0,0也为偶数
           {
            if($slen%2==1) #如果所要求的长度为奇数
                         {
                          $tmpstr=substr($sstr,0,$slen-1);
                     }
                   else #所要求的长度为偶数
                     {
                      $tmpstr=substr($sstr,0,$slen);
                     }
           }
         $makelen=$tmpstr;
     }
   else
     {
         $makelen=$sstr;
     }
   return $makelen;
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在C++中,可以使用std::wstring和std::wistringstream以及iswalpha函数来分割中英文混合字符串。以下是一个简单的示例: ```c++ #include <iostream> #include <string> #include <sstream> #include <locale> int main() { std::wstring str = L"这是一段English和中文混合字符串。"; std::wistringstream iss(str); std::wstring word; // 设置本地化环境,用于判断是否是中文字符 std::locale loc(""); while (iss >> word) { std::wstring eng, chn; for (wchar_t c : word) { if (iswalpha(c)) { eng += c; } else if (std::iswctype(c, std::iswctype::wctype("CJK"), loc)) { chn += c; } } std::wcout << "英文单词:" << eng << std::endl; std::wcout << "中文字符:" << chn << std::endl; } return 0; } ``` 在上面的示例中,我们首先创建一个std::wstring类型的字符串,并使用std::wistringstream把它转换为std::wstring类型的输入流。然后,我们使用std::locale设置本地化环境,以便使用iswalpha和iswctype函数来判断字符是否是英文字符和中文字符。 在循环中,我们使用std::wstring类型的word变量逐个读取输入流中的单词。对于每个单词,我们遍历它的每个字符,如果字符是英文字符,则把它加入到std::wstring类型的eng变量中,如果字符是中文字符,则把它加入到std::wstring类型的chn变量中。最后,我们输出英文单词和中文字符。 注意,上面的示例仅供参考,实际上,你需要根据你的具体需求来分割中英文混合字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wildhorse01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值