坐标移动

坐标移动

http://www.nowcoder.com/questionTerminal/119bcca3befb405fbe58abe9c532eb29

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

输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10; A1A; ; YAD; 等。
下面是一个简单的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
起点(0,0)
结果 (10, -10)
注意请处理多组输入输出
输入描述:
一行字符串
输出描述:
最终坐标,以,分隔
示例1
输入A10;S20;W10;D30;X;A1A;B10A11;;A10;
输出10,-10

C语言代码如下:

#include <stdio.h>
#include <string.h>

void calculate(int *num,char *tmp){
    int i = 1;
    int n = 0;
    while(tmp[i]!='\0'){
        n = n*10+(tmp[i]-'0');
        i++;
    }
    switch(tmp[0]){
        case 'A':
            num[0]-=n;break;
        case 'D':
            num[0]+=n;break;
        case 'W':
            num[1]+=n;break;
        case 'S':
            num[1]-=n;break;
    }
}

int main(){
    int num[2]={0,0};//初始坐标
    char str[10000]={0};//输入的字符串
    int i=0,len;
    char *tmp = NULL;

    while(gets(str)){
        char *p = str;
        tmp = (char*)malloc(4*sizeof(char));//保存坐标字串
        memset(tmp, '\0', 4);

        while(*p != '\0'){
            if(*p == 'A'||*p=='D'||*p=='W'||*p=='S'){
                if(*(p+1)>='0' && *(p+1)<='9'){
                    if(*(p+2)==';'){
                        strncpy(tmp,p,2);
                        calculate(num, tmp);
                        memset(tmp, '\0', 4);
                    }
                    if(*(p+2)>='0' && *(p+2)<='9' && *(p+3)==';'){
                        strncpy(tmp,p,3);
                        calculate(num, tmp);
                        memset(tmp, '\0', 4);
                    }
                }
            }
            p = strchr(p, ';')+1;
        }
        printf("%d,%d",num[0],num[1]);
        //getchar();
    }
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
转发
3 1 评论
分享
牛客网
牛客企业服务