C语言进阶题——坐标移动
开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入
A10;S20;W10;D30;X;A1A;B10A11;;A10;
输出
10,-10
#include<stdio.h>
int main(){
int x = 0, y = 0;
char ch[5000];
scanf("%s",ch);
for (int i = 0; ch[i] != '\0'; ++i){
if (ch[i] == 'A'){
if ((ch[i + 1] >= 0 && ch[i + 1] <= '9') && (ch[i + 2] >= 0 && ch[i + 2] <= '9')){
//移2位数
x = x - (ch[i + 1] - 48) * 10 - (ch[i + 2] - 48);
if (ch[i+3] != ';'){
//即输入格式不正确,跳过错误格式,到下一个正确格式中,下同
x = x + (ch[i + 1] - 48) * 10 + (ch[i + 2] - 48);
}
i = i + 3;
}
else if (ch[i + 1] >= 0 && ch[i + 1] <= '9'){
//移1位数
x = x - (ch[i + 1] - 48);
if (ch[i+2] != ';'){
x = x + (ch[i + 1] - 48);
}
i = i + 2;
}
else {
while (ch[i] != ';'){
i++;
}
}
}
else if (ch[i] == 'D'){
if ((ch[i + 1] >= 0 && ch[i + 1] <= '9') && (ch[i + 2] >= 0 && ch[i + 2] <= '9')){
x = x + (ch[i + 1] - 48) * 10 + (ch[i + 2] - 48);
if (ch[i+3] != ';'){
x = x - (ch[i + 1] - 48) * 10 - (ch[i + 2] - 48);
}
i = i + 3;
}
else if (ch[i + 1] >= 0 && ch[i + 1] <= '9'){
x = x + (ch[i + 1] - 48);
if (ch[i+2] != ';'){
x = x - (ch[i + 1] - 48);
}
i = i + 2;
}
else {
while (ch[i] != ';'){
i++;
}
}
}
else if (ch[i] == 'W'){
if ((ch[i + 1] >= 0 && ch[i + 1] <= '9') && (ch[i + 2] >= 0 && ch[i + 2] <= '9')){
y = y + (ch[i + 1] - 48) * 10 + (ch[i + 2] - 48);
if (ch[i+3] != ';'){
y = y - (ch[i + 1] - 48) * 10 - (ch[i + 2] - 48);
}
i = i + 3;
}
else if (ch[i + 1] >= 0 && ch[i + 1] <= '9'){
y = y + (ch[i + 1] - 48);
if (ch[i+2] != ';'){
y = y - (ch[i + 1] - 48);
}
i = i + 2;
}
else {
while (ch[i] != ';'){
i++;
}
}
}
else if (ch[i] == 'S'){
if ((ch[i + 1] >= 0 && ch[i + 1] <= '9') && (ch[i + 2] >= 0 && ch[i + 2] <= '9')){
y = y - (ch[i + 1] - 48) * 10 - (ch[i + 2] - 48);
if (ch[i+3] != ';'){
y = y + (ch[i + 1] - 48) * 10 + (ch[i + 2] - 48);
}
i = i + 3;
}
else if (ch[i + 1] >= 0 && ch[i + 1] <= '9'){
y = y - (ch[i + 1] - 48);
if (ch[i+2] != ';'){
y = y + (ch[i + 1] - 48);
}
i = i + 2;
}
else {
while (ch[i] != ';'){
i++;
}
}
}
else{
while (ch[i] != ';'){
//当方向不是A,B,C,D是,则跳过,跳到‘;’位置
i++;
}
}
}
printf("%d,%d\n",x,y);
return 0;
}
运行结果:
输入
A10;S20;W10;D30;X;A1A;B10A11;;A10;
输出
10,-10