我想从字符串中删除所有标点符号并在C中将所有大写字母小写,任何建议?
只是使用ctype.h
提供的函数的算法草图:
#include void remove_punct_and_make_lower_case(char *p) { char *src = p, *dst = p; while (*src) { if (ispunct((unsigned char)*src)) { /* Skip this character */ src++; } else if (isupper((unsigned char)*src)) { /* Make it lowercase */ *dst++ = tolower((unsigned char)*src); src++; } else if (src == dst) { /* Increment both pointers without copying */ src++; dst++; } else { /* Copy character */ *dst++ = *src++; } } *dst = 0; }
标准警告适用:完全未经测试; 改进和优化留给读者作为练习。
循环遍历字符串的字符。 每当遇到标点符号( ispunct
)时,请不要将其复制到输出字符串。 每当遇到“alpha char”( isalpha
)时,请使用tolower
将其转换为小写。
所有提到的函数都在
中定义
您可以就地执行此操作(通过保留单独的写指针和读取指向字符串的指针),或者从中创建新的字符串。 但这完全取决于您的申请。
在C中执行此操作的惯用方法是使用两个指针,一个源和一个目标,并分别处理每个字符:例如
#include void reformat_string(char *src, char *dst) { for (; *src; ++src) if (!ispunct((unsigned char) *src)) *dst++ = tolower((unsigned char) *src); *dst = 0; }
src和dst可以是相同的字符串,因为目标永远不会大于源。
虽然它很诱人,但请避免调用tolower(*src++)
因为tolower可以实现为宏。
避免使用搜索要替换的字符的解决方案(使用strchr或类似方法),它们会将线性算法转换为几何算法。
这是给你一个粗略的答案:
void strip_punct(char * str) { int i = 0; int p = 0; int len = strlen(str); for (i = 0; i < len; i++) { if (! ispunct(str[i]) { str[p] = tolower(str[i]); p++; } } }
以上就是c/c++开发分享如何从C中的String中删除标点符号相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560324.html