如何去掉一个汉语字符串中的全部标点符号?

heartgoon2010 2010-05-21 08:28:23
已知string str = "在过几天,我就要看完《C++程序设计》这本书了;心里很激动!想放松放松。";
如何去掉str对象中的全部标点符号,包括,。《》;。得到没有标点符号的string对象。
方法越简单越好。先谢各位了
...全文
703 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhao01081122Heng 2010-05-21
  • 打赏
  • 举报
回复
ASCII码不是用来表示汉字的。
汉字是用汉字内码表示的 范围是B0A0-----F7FF
heartgoon2010 2010-05-21
  • 打赏
  • 举报
回复
楼上的朋友,又是你帮我解答的问题,太感谢你了,以后一定多向你学习!
windsting 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 heartgoon2010 的回复:]
to wanggang999
要是像你说的那么做的话,代码得很长很麻烦啊,还有没有什么省事的办法啊
大家帮忙想想办法啊
[/Quote]
要搞清楚,所谓简单,就是易于理解、实现,只要代码清晰,略长一点有什么关系呢?
要省事的话,可以尝试一下 std::replace(),具体用法参考MSDN,
当然是对所有标点符号都用一次,可以封装一个函数,里面对每个标点用 replace(),
这样,对于单个字符串,只用一行代码就可以搞定了,如果是一个字符串容器,
可以考虑 std::transform() 用法也是参考 MSDN,整个容器一行代码搞定。

题外话:这个问题到后来,你会发现问题的根本又会扯到字符串的编码格式上去,
不外乎就是 ASCII 兼容的(比如 GB2312、GBK、GB18030)、Unicode 16、UTF-8,
这才是问题的难点,希望你有心理准备。
子庚 2010-05-21
  • 打赏
  • 举报
回复
;问一下楼上的,一个怎么才能知道一个汉字符号的ascii码值呢??
谢谢
白云飘飘飘 2010-05-21
  • 打赏
  • 举报
回复
n+=2;
白云飘飘飘 2010-05-21
  • 打赏
  • 举报
回复
int main()
{

string str = ",在过几天,我就要看完《C++程序设计》这本书了;心里很激动!想放松放松。";
size_t n=0;
size_t count=0;
unsigned char c1,c2;
setlocale(LC_ALL,"");
while(n<str.size()-1)
{
count=mblen(&str[n],2);
if (count==1)
str.erase(n,1);
else
{
c1=(unsigned char)str[n];
c2=(unsigned char)str[n+1];
if (((c1>=0xa1&&c1<=0xa9)&&(c2>=0xa1&&c2<=0xfe))||
((c1>=0xa8&&c1<=0xa9)&&(c2>=0x40&&c2<=0xa0)))
str.erase(n,2);
else
n++;
}
}

system("pause");
return 0;

}
heartgoon2010 2010-05-21
  • 打赏
  • 举报
回复
标点符号的双字节有没有什么特征?
顺便问一下,如何才能得到一个字符(串)的二进制表示?
tang21814 2010-05-21
  • 打赏
  • 举报
回复
我现在的水平也只能想到用find_first_of和循环来做这个...
heartgoon2010 2010-05-21
  • 打赏
  • 举报
回复
楼上的能说清楚点吗?要怎么编程啊
shiweifu 2010-05-21
  • 打赏
  • 举报
回复
状态机。
heartgoon2010 2010-05-21
  • 打赏
  • 举报
回复
to wanggang999
要是像你说的那么做的话,代码得很长很麻烦啊,还有没有什么省事的办法啊
大家帮忙想想办法啊
windsting 2010-05-21
  • 打赏
  • 举报
回复
把所有标点符号列出来,然后在目标字符串中挨个搜索,然后是删除还是替代就是你自己的事了,
这是我能想到的最简单的方法。
屏幕取词 使用 nhw32.dll 主要引出两个函数: 1. DWORD WINAPI BL_SetFlag32(UINT nFlag, HWND hNotifyWnd, int MouseX, int MouseY) 功能: 启动或停止取词。 参数: nFlag [输入] 指定下列值之一: GETWORD_ENABLE: 开始取词。在重画被取单词区域前设置此标志。nhw32.dll是通过 重画单词区域,截取TextOutA, TextOutW, ExtTextOutA, ExtTextOutW等Windows API函数的参数来取词的。 GETWORD_DISABLE: 停止取词。 hNotifyWnd [输入] 通知窗口句柄。当取到此时,向该通知窗口发送一登记消息:GWMSG_GETWORDOK。 MouseX [输入] 指定取词点的X坐标。 MouseY [输入] 指定取词点的Y坐标。 返回值: 可忽略。 2. DWORD WINAPI BL_GetText32(LPSTR lpszCurWord, int nBufferSize, LPRECT lpWordRect) 功能: 从内部缓冲区取出单词文本串。对英语文本,该函数最长取出一行内以空格为界的三个英文单词串,遇空格,非英文字母及除‘-’外的标点符号,则终止取词。对汉字文本,该函数最长取出一行汉字串,遇英语字母,标点符号等非汉语字符,则终止取词。该函数不能同时取出英语和汉语字符。 参数: lpszCurWord [输入] 目的缓冲区指针。 nBufferSize [输入] 目的缓冲区大小。 lpWordRect [输出] 指向 RECT 结构的指针。该结构定义了被取单词所在矩形区域。 返回值: 当前光标在全部词的位置。 此外,WinNT/2000版 nhw32.dll 还引出另两个函数: 1. BOOL WINAPI SetNHW32() 功能: Win NT/2000 环境下的初始化函数。一般在程序开始时,调用一次。 参数: 无。 返回值: 如果成功 TRUE ,失败 FALSE 。 2. BOOL WINAPI ResetNHW32() 功能: Win NT/2000 环境下的去初始化函数。一般在程序结束时调用。 参数: 无。 返回值: 如果成功 TRUE ,失败 FALSE 。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧