我问了一个类似的问题,但遗漏了一个重要的细节。我正在对字符数组(cstring)进行一些文本处理。输入数组被复制到输出数组,除了某些字符被改变(例如 a->b)。这是通过使用 switch 语句来完成的。我想要的是,如果在一行中找到两个或多个特定字符,则只有其中一个被复制到新数组中(所以我不希望一行中有两个空格)。
这就是我到目前为止所得到的,它可以在不跳过某些字符的一行中的两个或多个的情况下工作:
char cleanName[ent->d_namlen];
for(int i = 0; i < ent->d_namlen; i++)
{
switch(ent->d_name[i])
{
case 'a' :
cleanName[i] = 'b';//replace a's with b's (just an example)
break;
case ' ' ://fall through
case '-' :
case '–' :
case '—' :
cleanName[i] = '_';//replace spaces and dashes with spaces
break;
....//more case statments
default:
cleanName[i] = ent->d_name[i];
}
}
例如,如果一行中的两个字符被下划线替换,我该怎么做?我只执行switch
语句if(ent->d_name[i] != previous || (ent->d_name[i] != '-' && ent->d_name[i] != '_' && ent->d_name[i] != ' ')
这可能更像是一个算法问题,而不是特定于实现的问题。
示例输入:abbc--de
输出:bbbc_d_e(为简单起见,假设“a”映射到“b”,但实际上不止于此)