编写一个不返回值的函数来删除C字符串中的大写字母
void erase(char * a) { char * targetp = sourcep;
while (*sourcep != '\0')
{
if (isupper(static_cast<unsigned char>(a)== false)
{
*targetp++ = *sourcep;
}
a++;
}
*a='\0';
}
答案 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
在重新分配后仍为大写,那么它会再次执行。