为难了我很久的编程难题

求大家帮忙想想,在visual c++里面对一个给定的中文文本怎么把英语和标点符号过滤掉?

 #include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() 
{
    string s = "中文123,英文abc...";
    string r = "";
    const char* c = s.c_str();
    for (int i = 0; i < s.length(); i++)
        if (c[i] > 256 || c[i] < 0)
            r += c[i];
    cout << r << endl;
}
 #include <regex>

这个可以去掉

在线编译测试:
http://ideone.com/z2yjD1
中文英文

直接判断字节值是不是小于 0x80,成立则是英文标点符号,因为中文编译方案中所有字节值都是大于0x7F的

如果是Unicode编码方案,因为所有符号都用两个字节存储,而且英文符号的第二个字节值 为0,所以按
caozhy 给的代码处理就行。

需要区分编码格式的,比如是char类型还是wchar_t类型。为此,可以用TCHAR类型,然后遍历字符串中的每一个字符,判断是否处于_T('A')和_T('Z'),以及a~z之间。对于标点符号一样处理。

用正则表达式可以排除除了汉字和全角标点外的字符

c[i]>256在这里起什么作用?
char的取值不是-128~127么?