[英]C: Remove symbols from a string
我能否知道是否可以从C语言的字符串中删除非字母符号?
例如,我有一个char array[5][5]
,其内容为: "hi", "my..", "name", "is,,", "bob!"
期望的输出: "hi", "my", "name", "is", "bob"
反正有删除符号吗?
这是一个非常简单的实现:
void keepalnum(char *src) {
unsigned char *dest = src;
while ((*dest = *src++))
dest += isalnum(*dest) ? 1 : 0;
}
想法是在每次复制后都使源指针前进,但是仅当看到字母数字字符时才移动目标指针。
使用方法如下:
char str[] = "quick-brown fox jumps? over the.. lazy dog!";
keepalnum(str);
printf("%s\n", str);
此打印
quickbrownfoxjumpsoverthelazydog
使用C isalnum(int ch);
您可以删除既不是数字也不是字符的过滤器值,如下所示:
#include <stdio.h>
#include <string.h>
#define ARRAY_LEN 5
#define STR_LEN 5
int main(int argc, char *argv[])
{
int rc = 0;
char array[5][5];
char out_str[5] = {0};
int array_idx, str_idx, cpy_idx;
strcpy(array[0], "hi");
strcpy(array[1], "my..");
strcpy(array[2], "name");
strcpy(array[3], "is,,");
strcpy(array[4], "bob!");
for(array_idx=0; array_idx < ARRAY_LEN; array_idx++)
{
cpy_idx = 0;
for(str_idx=0; str_idx < STR_LEN; str_idx++)
{
if(isalnum(array[array_idx][str_idx]))
{
out_str[cpy_idx++]= array[array_idx][str_idx];
}
}
out_str[cpy_idx++] = '\0';
printf("%s ", out_str);
}
printf("\n");
return rc;
}
此示例没有结束边界检查,因为该示例是围绕4个字符的字符串加上一个终止的0编码的。实际上,我声明的缓冲区大于我打算处理的最大字符串,但是我仍然计算要复制的字符,在这里还没有完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.