截取含有中文的字符段

题目要求:

输入里面既含有中文又含义英文,按照我们平时读的习惯,截取任意长度的字符串n(n<=总长度)

例:china中国verygood天朝nice

fn(5) = china

fn(6) = china中

fn(8) = china中国v

#include <stdio.h>
#include <string>
#include<iostream>
using namespace std;

bool is_word(char c) {  //判断是否为中文
	if (c & 0x80)
		return true;
	return false;
}
int main(){
	string a;
	int len,l,r;
	int num = 0,is_ZH=0;
	int index[1010];
	cout << "输入字符串:";
	cin >> a;
	len = a.length();

	cout << "index[]  ";
	for (int i = 0; i < len; i++) {  //把字符串中的中文化为一个字节,存入int型数组。最后以int数组截取字符串,看下面例子。
		if (is_word(a[i])) {
			index[num++] = i + 2;
			i++;
		}
		else
		index[num++] = i+1;
		cout << index[num - 1]<<" " ;
	}
	cout << endl;

	int ca = 7;
	while (ca--){
		cout << "输出你想截取的段,0 ~ " << endl;
		cin >> r;
		cout << "index[r-1]:"<<index[r - 1] << endl;
		cout << a.substr(0, index[r - 1]) <<endl;
	
	}
	
	system("pause");
	return 0;
}	

/*
例:
字符串:china中国nice奈斯
int数组:
下标:0 1 2 3 4 5 6  7  8  9 10 11 12 
值  :1 2 3 4 5 7 9 10 11 12 13 15 17
*/

结果: 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值