MS面试题
来源:smth
问题:编写atoi,即将字符串转为整型。
分析:这个问题其实很easy,任何一个人都能写出那么几句,可实际上MS却喜欢能handle各种情况的版本。下面我编写的这个版本能将" 123 ", " +123 "," -123"," 1 2 3 "
全部转为123。
int atoi_mine(char* string)
{
int i;
int val;
for ( i = 0; isspace(string[i]); i++)
;
int sign = (string[i] == '-') ? -1 : 1;
if('-' == string[i] || '+' == string[i]) i++;
for(val = 0; string[i] != '\0';i++)
{
if( isspace(string[i]) ) continue;
if(isdigit(string[i]))
{
val = string[i] - '0' + 10*val;
}
}
return val * sign;
}
问题一:将空格为分隔符的字符串逆序打印,但每个token不逆序。例如 "Hello world I am william",那么打印出的结果为"william am I world Hello"
C程序:
// IN means, enter the word
#define OUT 0
#define IN 1
// print
static void printIJ(char* string, int i, int j)
{
int k;
for(k = i; k <= j; k++)
printf("%c", string[k]);
}
// reverse function
void Reverse_Sentence(char* string)
{
int n ;
int state = OUT;
int i;
int j;
for(n = strlen(string) -1; n > 0; n--)
{
if(isspace(string[n]))
{
if( IN == state)
{
i = n + 1;
printIJ(string, i, j);
}
printf("%c", string[n]);
state = OUT;
}else if (OUT == state)
{
state = IN;
j = n; // right side
}
}
if(i > j) printIJ(string, 0, j);
}
没有评论:
发表评论