坐标移动

描述: 

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

 

输入:

 

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

 

坐标之间以;分隔。

 

非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。

 

下面是一个简单的例子 如:

 

A10;S20;W10;D30;X;A1A;B10A11;;A10;

 

处理过程:

 

起点(0,0)

 

+   A10   =  (-10,0)

 

+   S20   =  (-10,-20)

 

+   W10  =  (-10,-10)

 

+   D30  =  (20,-10)

 

+   x    =  无效

 

+   A1A   =  无效

 

+   B10A11   =  无效

 

+  一个空 不影响

 

+   A10  =  (10,-10)

 

 

 

结果 (10, -10)

 
题目类别:  字符串 
难度:  中级 
运行时间限制: 10Sec
内存限制: 128MByte
阶段:  入职前练习 
输入:  

一行字符串

 
输出:  

最终坐标,以,分隔

 
样例输入:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
                   
样例输出:
10,-10
           
代码:

#include   
#include   
 
int judge(char *str)  
{  
    int i, len = strlen(str);  
    if ((len != 3) && (len != 2))  
        return 0;  
    if ((str[0] != 'A') && (str[0] != 'D') && (str[0] != 'W') && (str[0] != 'S'))  
        return 0;  
    for (i = 1; i < len; i++)  
    {  
        if ((str[i] < '0') || (str[i] > '9'))  
            return 0;  
    }  
    return 1;  
}  
 
void move(char *str,int axis[])  
{  
    int i, num = 0, len = strlen(str);  
    for (i = 1; i < len; i++)  
    {  
        num = num * 10 + str[i] - '0';  
    }  
    if (str[0] == 'A')  
    {  
        axis[0] -= num;  
    }  
    if (str[0] == 'S')  
    {  
        axis[1] -= num;  
    }  
    if (str[0] == 'W')  
    {  
        axis[1] += num;  
    }  
    if (str[0] == 'D')  
    {  
        axis[0] += num;  
    }  
}  
 
 
int main()  
{  
    int i, j = 0, axis[2] = {0};  
    char input[256], str[50];  
    gets(input);  
    for (i = 0; input[i] != '\0'; i++)  
    {  
        while ((input[i] != ';') && (input[i] != '\0'))  
        {  
            str[j++] = input[i++];    
        }  
        str[j] = '\0';  
        j = 0;  
        if (judge(str))  
            move(str, axis);  
    }  
    printf("%d,%d\n", axis[0], axis[1]);  
}




你可能感兴趣的:(华为测试平台题目)