我试图做一个功能,从字符串中删除双字母。该功能仅应删除彼此相邻的双字母,而不是整个字符串中的双字母。例如,“ aabbaa”将变为“ aba”(而不是“ ab”)。我是C语言编程的新手,并且不完全了解指针等,因此需要一些帮助。以下是我到目前为止的内容。它根本不起作用,我也不知道要返回什么,因为当我尝试返回string []时,它有一个错误:
char doubleletter( char *string[] ) {
char surname[25];
int i;
for((i = 1) ; string[i] != '\0' ; i++) {
if (string[i] == string[(i-1)]) { //Supposed to compare the ith letter in array with one before
string[i] = '\0' ; //Supposed to swap duplicate chars with null
}
}
surname[25] = string;
return surname ;
尝试以下方法。这是一个清晰的简单且专业的代码。:)
#include <stdio.h>
char * unique( char *s )
{
for ( char *p = s, *q = s; *q++; )
{
if ( *p != *q ) *++p = *q;
}
return s;
}
int main(void)
{
char s[] = "aabbaa";
puts( unique( s ) );
return 0;
}
输出是
aba
此外,还可以通过以下方式重写该函数,以避免不必要的复制。
char * unique( char *s )
{
for ( char *p = s, *q = s; *q++; )
{
if ( *p != *q )
{
( void )( ( ++p != q ) && ( *p = *q ) );
}
}
return s;
}
或者
char * unique( char *s )
{
for ( char *p = s, *q = s; *q++; )
{
if ( *p != *q && ++p != q ) *p = *q;
}
return s;
}
看来最后的实现是最好的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句