我期待从字符串中删除所有标点符号并在C中使所有大写字母小写,任何建议吗?如何从字符串中删除标点符号C
3
A
回答
10
只需通过使用ctype.h
提供的功能的算法的草图:
#include <ctype.h>
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;
}
标准警告应用:完全未测试;改进和优化作为练习留给读者。
12
循环字符串的字符。无论何时遇到标点符号(ispunct
),都不要将其复制到输出字符串中。无论何时遇到“字母字符”(isalpha
),请使用tolower
将其转换为小写字母。
提及的所有功能都在<ctype.h>
您可以做到就地定义(通过保持独立的写指针和读指针指向字符串),或从它创建一个新的字符串。但是这完全取决于你的应用程序。
5
在C语言中这样做的习惯做法是有两个指针,一个源和一个目标,并分别处理每个字符:例如,
#include <ctype.h>
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可能被实现为宏,因此请尽量不要致电tolower(*src++)
。
避免搜索要替换字符的解决方案(使用strchr或类似方法),它们会将线性算法变成几何算法。
0
这里有一个答案的粗剪给你:
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++;
}
}
}
相关问题
- 1. C++从字符串中删除标点符号和空格
- 2. 如何从字符串中删除标点符号? (Python)
- 3. 从字符串C#删除点字符
- 4. 从VB.net中的字符串中删除所有标点符号
- 5. 如何从Python字符串中去除unicode“标点符号”
- 6. 如何从字符串中去除标点符号?
- 7. 从c中的字符串中删除标点符号和空格?
- 8. 从字符串中删除所有非字字符(标点符号)
- 9. 从字符串c中删除单引号字符C++
- 10. C++从字符串中删除字符
- 11. 从c字符串中删除字符
- 12. C从字符串中删除字符
- 13. 从C字符串中删除字符
- 14. 最有效的方式来从字符串中删除标点符号在c + +
- 15. 在Perl中删除字符串中的标点符号
- 16. Javascript:如何从字符串末尾去除标点符号
- 17. 如何通过位置号从字符串中删除字符?
- 18. 从字符串中删除字符串模式和符号
- 19. 从字符串末尾删除^符号
- 20. 从列表中删除标点符号
- 21. 从C中的UTF8字符串中删除变音符号
- 22. 如何从C++中的字符串中删除字符?
- 23. 如何从Haskell中的字符串中删除重音符号?
- 24. 从字符串中删除&字符目标c
- 25. 如何从C#字符串中删除一些字符?
- 26. 如何使用Python从字符串中删除符号?
- 27. 如何从字符串中删除这些符号(垃圾)?
- 28. 如何从字符串中删除$符号
- 29. 如何从字符串中删除所有符号和空格?
- 30. 如何从字符串中删除摄氏度符号(java)
你需要做的是就地或者你可以在一个新的缓冲区工作? – jason 2009-12-03 18:08:34
贾森,eliben的答案将正常工作时,源==目的地;-) – 2009-12-03 18:09:50
你在做这个英文吗?一些语言在压缩字符方面存在问题。 – 2009-12-03 18:14:00