C++:如何提取字符串中的汉字,数字!!!

如题所述

/*******************
以前回答过了。再贴一遍
*******************/
#include<iostream>
#include<string>

//取得字符串字符个数,不限中英文
unsigned int GetStringCount(const std::string &s)
{
short ch;
unsigned cnt = s.size();
for(size_t i=0; i<s.size(); ++i)
{
ch = s.at(i);
if(ch&0x1000) ++i,--cnt;
}
return cnt;
}

//取得以0为起始索引的指定位置字符
std::string GetString(std::string &s, size_t index)
{
short ch;
std::string res;
unsigned cnt = index;
for(size_t i=0; i<s.size() && i<cnt; ++i)
{
ch = s.at(i);
if(ch&0x1000) ++i,++cnt;
}
ch = s.at(i);
if(ch&0x1000) res=s.substr(i,2);
else res=s.substr(i,1);
return res;
}

//取字符串中的整型数,支持负数。string输入,vector输出
void get_int(const std::string& s, std::vector<int>& vi)
{
std::string::size_type size = s.size();
int element = 0;
bool now_digit = false;
bool negative = false;
for(std::string::size_type i=0; i<size; ++i)
{
if(s.at(i)<='9' && s.at(i)>='0')
{
now_digit = true;
element = element*10 + s.at(i)-'0';
}
else
{
if(s.at(i) == '-') negative = true;
else
{
if(now_digit)
{
if(negative) element = -element;
vi.push_back(element);
element = 0;
now_digit = false;
negative = false;
}
}
}
}
if(now_digit)
{
if(negative) element = -element;
vi.push_back(element);
}
}

int main()
{
std::string s;
std::cin>>s;
std::cout<<GetStringCount(s)<<std::endl;
std::cout<<GetString(s,2)<<std::endl;
std::vector<int> vi;
get_int(s, vi);
std::vector<int>::iterator it = vi.begin();
for(; it!=vi.end(); ++it) std::cout<<*it<<std::endl;

return EXIT_SUCCESS;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-13
如果字符串中只有汉字、数字、英文的话(日文和中文在一起,我就不会判断了)

你可以按这个顺序判断。
先判断该字符的是不是小于0,如果小于0,则该字符与后面一个字符组成一个汉字。
再判断该字符是不是数字。这个好判断吧(>='0' && <='9')
第2个回答  2018-07-11
汉字部分呢?
第3个回答  2012-04-23
提问,能指教吗
相似回答