删除C-String中的大写字母

时间:2018-03-05 07:50:57

标签: c++

编写一个不返回值的函数来删除C字符串中的大写字母

void erase(char * a) {     char * targetp = sourcep;

while (*sourcep != '\0')
{
    if (isupper(static_cast<unsigned char>(a)== false)     
    {
        *targetp++ = *sourcep;
    }
    a++;
}
*a='\0';
}

3 个答案:

答案 0 :(得分:4)

如果您删除了一封信,

a++应该。使用else来实现它。

否则你会跳过字母,如果有连续的大写字母,你的算法就会失败。

同样*p != '\0'可缩写为*p。不是每个人的口味,而是我的工作。

答案 1 :(得分:4)

每次看到大写字母时都不应复制所有文字。您只需跳过大写字母并逐步复制。请参阅以下解决方案。它快得多!

void deleteCapitals(char* sourcep) //a function that only passes
{
    char* targetp = sourcep;

    while (*sourcep != '\0')
    {
        if (!isupper(static_cast<unsigned char>(*sourcep)))     
        {
            *targetp++ = *sourcep;
        }
        sourcep++;
    }
    *targetp='\0';
}

答案 2 :(得分:0)

每当两个大写字母彼此相邻时,你会传递给第二个大写字母。

@ Bathsheba解决方案的替代方案是使用while代替if

while (isupper(*a))
{
    for (char* p = a; *p != '\0'; p++)
    {
        *p = *(p + 1);
    }
}

如果*a在重新分配后仍为大写,那么它会再次执行。