本关任务:在一串隐藏着一个或多个数值的字符中,选出字符串中的所有数字字符,并将选出的数字字符重新组成新字符串。如果在第一个数字字符之前有负号,则保留该负号,有多个负号时只保留一个。
dash代表负号,allow_dash表示需不需要纳入负号。算法思路是将负号和数字插入到原来字符串的前端,跳过第二次出现的负号或者英文字符。
Way1:
void extractNum(char * str)
{
//输出dash当且仅当,前面没有数字,而且dash没有出现过
bool allow_dash = true;
char * a = str;
char * b = str;
for(; *b ;b++)
{
char ch = *b;
if(ch == '-' && allow_dash)
{
*a = '-';
a++;
allow_dash = false;
}
else if(isdigit(ch))
{
*a = ch;
a++;
allow_dash = false;
}
}
*a='\0';
}
Way2:
void extractNum(char * str)
{
//输出dash当且仅当,前面没有数字,而且dash没有出现过
bool allow_dash = true;
char * a = str;
char * b = str;
for(; *b ;b++)
{
char ch = *b;
if((ch == '-' && allow_dash) || isdigit(ch)) //负号首次出现,或者数字
{
*a = ch;
a++;
allow_dash = false;
}
}
*a='\0';
}
Way3:
void extractNum(char * str)
{
//输出dash当且仅当,前面没有数字,而且dash没有出现过
bool allow_dash = true;
char * a = str;
char * b = str;
for(; *b ;b++)
{
if((*b == '-' && allow_dash) || isdigit(*b))
{
*a++ = *b;
allow_dash = false;
}
}
*a='\0';
}