C言語の高度な質問-動きを調整する

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

おすすめ

転載: blog.csdn.net/qq_45841205/article/details/109556332