利用C++去除字符串中的中文

原始程序

#include <string>

#include <iostream>
using namespace std;

string RemoveChinese(string str){
    char strR[100] = "";
    int nDest = 0;
    for(int nIndex = 0; nIndex < str.length(); ++nIndex ){
        unsigned char chStr = str[nIndex];//这里一定要用无符号的,否则中文字符比较也会通过~
        if( (chStr >= 0xb0 && chStr <= 0xf7) || ( chStr >= 0xa1 && chStr <= 0xfe ) ) continue;
        strR[nDest] = str[nIndex];
        nDest++;
    }
    return strR;
}

int main(void){
    string str;
    cout<<"请输入需要筛选的字符(结束程序请输入a):"<<endl;
    cin>>str;
    while( str != "a" ){
        cout<<"筛选后字符为:"<<RemoveChinese(str)<<endl;
        cout<<"请输入需要筛选的字符(结束程序请输入a):"<<endl;
        cin>>str;
    }
    return 0;
} 

运行结果

直接读取剪切板中的内容将结果返回给剪切板

#include <iostream>
#include <windows.h>
using namespace std;

//将内容写入剪切板
int write_clipboard(char *strText);

//从剪切板中读取内容
int get_clipboard(char *str);

//删除字符串中的中文
char * RemoveChinese(char * str);

int main(void){
    char import[100] = {0};
    get_clipboard(import);
    char * output = RemoveChinese(import);
    write_clipboard(output);
    return 0;
} 

int write_clipboard(char *strText)
{
    // 打开剪贴板   
    if (!OpenClipboard(NULL)|| !EmptyClipboard())    
    {   
        printf("打开或清空剪切板出错!\n");   
        return -1;   
    }   
    HGLOBAL hMen;   
    // 分配全局内存    
    hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(strText)+1)*sizeof(TCHAR)));    
    if (!hMen)   
    {   
        printf("分配全局内存出错!\n");
        // 关闭剪切板    
        CloseClipboard();   
        return -1;         
    }   
    // 把数据拷贝考全局内存中   
    // 锁住内存区    
    LPSTR lpStr = (LPSTR)GlobalLock(hMen); 
    // 内存复制   
    memcpy(lpStr, strText, ((strlen(strText))*sizeof(TCHAR)));   
    // 字符结束符    
    lpStr[strlen(strText)] = (TCHAR)0;   
    // 释放锁    
    GlobalUnlock(hMen);   
    // 把内存中的数据放到剪切板上   
    SetClipboardData(CF_TEXT, hMen);   
    CloseClipboard();   
    return 0; 
}

int get_clipboard(char *str){
	char *pbuf = NULL;
	//剪切板句柄
	HANDLE hclip;
	//打开剪切板,获取里面的数据
	if(OpenClipboard(NULL) == 0){
		printf("打开剪切板失败!\n");
		return -1;
	}
	//判断剪切板当中的数据是不是文本类型的
	if(!IsClipboardFormatAvailable(CF_TEXT)){
		printf("剪切板当中的数据类型不匹配!\n");

		//关闭剪切板,不然其他程序无法正常使用剪切板
		CloseClipboard();
		return -1;
	}
	//获取剪切板里面的数据
    hclip = GetClipboardData(CF_TEXT);
	//加锁,返回一个VOID类型的指针
	pbuf = (char *)GlobalLock(hclip);
	//解锁
	GlobalUnlock(hclip);	
	//将剪切板里面所有字符传入给参数
	while(1){		
		//如果到了字符串末尾就退出循环
		if(*pbuf == 0){
			break;
		}		
		//定义一个用于循环的局部变量
		int i = 0;
		do{
			//将读取到的字母或数字字符赋给word
			str[i] = *pbuf;
			//将指针指向下一个字符处
			++pbuf;
			++i;
		}while(*pbuf);
		//添加字符串结束
		str[i] = '\0';
	}
	//关闭剪切板,不然其他程序无法正常使用剪切板
	CloseClipboard();
	return 0;
}

char * RemoveChinese(char * str){
    int length = 0;
    char * tmp = str;
    //获取字符串的长度
    while(*tmp!='\0'){
        length++;
        tmp++;
    }
    int nDest = 0;
    for(int nIndex = 0; nIndex < length; nIndex++){
        //这里一定要用无符号的,否则中文字符比较也会通过
        unsigned char chStr = str[nIndex];  
        //判断是否为中文字符
        if((chStr >= 0xb0 && chStr <= 0xf7) || ( chStr >= 0xa1 && chStr <= 0xfe )) continue;
        tmp[nDest] = str[nIndex];
        nDest++;
    }
    return tmp;
}
THE END
分享
二维码
海报
利用C++去除字符串中的中文
原始程序 #include <string> #include <iostream> using namespace std; string RemoveChinese(string str){ char strR[100] = ""; ……