C 截取中文字串

网上有不少的java中文截取方法,但似乎一直没有一个好的办法用c对中文字串进行处理。
例如一个很长的字串,想分多行显示。


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

void getSubStr(char *str,char *substr,int start,int end);
void getStr(char *str,char *substr,int start,int end);
int startposizition(char *str,int start);
int endposizition(char *str,int end);


int main()
{
char str[500]="你好啊kkkk131你0啊3黑KKK乎fds乎好fdsa看到发 你埃弗fasf顿阿发fds生飞洒大法舒服阿飞多少";
char substr[200];
memset(substr,0,sizeof(substr));

getSubStr(str,substr,0,5);
printf("%s",substr);

getSubStr(str,substr,5,11);
printf("%s",substr);

getSubStr(str,substr,11,13);
printf("%s",substr);

getSubStr(str,substr,13,17);
printf("%s",substr);

getSubStr(str,substr,17,30);
printf("%s",substr);

getSubStr(str,substr,30,50);
printf("%s",substr);
return 0;
}


/*
* getsubstr此函数为截取中文函数,当一个字串过长,分段截取中,汉字占双字节,而字符为单字节
* 参数说明
* str 传入字串
* substr 返回子串
* start 取值开始位置
* end 取值结束位置
* 示例
* char str[500]="你好啊kkkk131你0啊3黑KKK乎fds乎好fdsa看到发 你埃弗fasf顿阿发fds生飞洒大法舒服阿飞多少";
* char substr[200];
* memset(substr,0,sizeof(substr));
* getSubStr(str,substr,0,5);getSubStr(str,substr,6,11);...
*/

void getSubStr(char *str,char *substr,int start,int end)
{
start = startposizition(str,start);
end = endposizition(str,end);
getStr(str,substr,start,end);
}


void getStr(char *str,char *substr,int start,int end)
{
char temp[200];
int i=0;
memset(temp,0,sizeof(temp));

for(start;start<=end;start++)
{
temp[i]=str[start];
i++;
}
temp[i]='\0';
strcpy(substr,temp);
}


/*判断末端取值位置*/
int endposizition(char *str,int end)
{
int i=0; //用于计数
int posizition=0; //还回位置
int tempposi=end;
while(str[tempposi]<0)
{
i++;
tempposi--;
}

if(i%2==0 && i!=0)
posizition=end;
else
posizition=end-1;
return posizition;
}


/*判断开始取值位置*/
int startposizition(char *str,int start)
{
int i=0; //用于计数
int posizition=0; //还回位置
int tempposi=start;
while(str[tempposi]<0)
{
i++;
tempposi--;
}

if(i%2==0 && i!=0)
posizition=start+1;
else
posizition=start;
return posizition;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值