c/c++语言开发共享如何从C中的String中删除标点符号

我想从字符串中删除所有标点符号并在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

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐