控制台乱码问题
本质原因
Windows系统下
默认控制台编码格式为936(ANSI/OEM - 简体中文 GBK)
而C程序文件默认编码格式为utf-8
由于编码格式不一致,程序运行时会出现中文乱码
解决方法
修改源码 使用系统调用
增添头文件
主动设置控制台输出的编码为utf-8格式
另存为
记事本打开C程序文件,点击【文件】–【另存为】,选择ANSI编码格式并替换原文件
vscode
如果是在vs code运行出现中文乱码,一般是将编码格式从utf-8修改为gbk、gb2312或者gb18030等即可
空格: 报错 illegal character U+00A0

n 滑块游戏,第二部分是 2n+1
个字符,表示该游戏的某个格局
如果不是目标格局,则按顺序(将格局看作字符串后,按照字典序排序,即
B < E < W)输出该格局的所有后继格局。例如,BBEBWWW 格局应该排在
BBWBWEW 格局的前面。
#include<iostream>#include<cstring>using namespace std;//将数组的第i个元素和第j个元素互换void swap(char str[], int i, int j) {char ch = str[i];str[i] = str[j];str[j] = ch;}// 将result数组的 前counter行 进行冒泡排序void bubbleSort(char result[][20], int counter, int length) {char str[20];for (int i = counter - 1; i > 0; i--) // 从第 counter个开始for (int j = 0; j < i - 1; j++)if (strcmp(result[j + 1], result[j]) < 0) {strcpy(str, result[j]);strcpy(result[j], result[j + 1]);strcpy(result[j + 1], str);}}//判断sliders是否为目标格局bool check(char* sliders,int length) {int wMaxIndex = 0;//最后一个白色将牌的下标int bMinIndex = 0;//第一个黑色将牌的下标for (int i = 0; i < length; i++) {if (sliders[i] == 'W')wMaxIndex = i;else if (sliders[i] == 'B')bMinIndex = i;}if (wMaxIndex < bMinIndex)return true;return false;}int main() {//假设输入的最大格局数是6,每个格局的最大长度是20const int MAX_N = 6;//输入的最大格局数const int MAX_LEN = 20;//每个格局的最大长度char buffer[MAX_N][MAX_LEN];//假设输入的格局不超过6个,每个格局不超过20个字符。int N;cin >> N; //3for (int i = 0; i < N; i++) {int numSlider;cin >> numSlider;cin >> buffer[i];}for (int k = 0; k < N; k++) {//对每一个格局进行遍历处理int counter = 0; //记录该格局的后继格局数int length = strlen(buffer[k]); //length是当前格局的长度char sliders[20];char result[10][20]; //存放该格局的所有后继格局,假设不超过10个cout << "结果_" << k + 1 << endl;strcpy(sliders, buffer[k]); //将当前格局复制到sliders中if (check(sliders,length)) {//检查当前格局是否为目标格局cout << "目标格局" << endl;continue;}for (int i = 0; i < 10; i++) {// 将当前格局复制到二维数组result的每一维上strcpy(result[i], sliders);}int index = 0;for (; index < length; index++) {// 查找空格字符E的下标if (sliders[index] == 'E')break; // index 指向 E}for (int offset = 1; offset < 4; offset++) {if (index + offset < length) {// E 向右找 1 2 3swap(result[counter], index, index + offset); //将空格和它右边的将牌交换counter++;}if (index - offset >= 0) {// E 向左找 1 2 3swap(result[counter], index, index - offset); //将空格和它左边的将牌交换counter++;}}bubbleSort(result, counter, length); // 当前格局的所有后继格局排序for (int m = 0; m < counter; m++) // 输出当前格局的所有后继格局cout << result[m] << endl;}return 0;}
