#include "mainwindow.h" #include "ui_mainwindow.h" static QString inputStr; static int cardNum = 0; static int bubbleNum =0; static char symbol[52]; static int rank[52]; static int bubble[10]; static QString outputStr = ""; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } bool MainWindow::scanInput()//Return true if format is correct,else return false { int i =0; //inputString Index do{ if(inputStr[i]==nullptr||inputStr[i]=='\n') { break; }else if(inputStr[i] == 's'||inputStr[i]=='S'){ cardNum += 1; symbol[cardNum-1]='s'; goto getRank; }else if(inputStr[i] == 'h'||inputStr[i]=='H'){ cardNum += 1; symbol[cardNum-1]='h'; goto getRank; }else if(inputStr[i] == 'd'||inputStr[i]=='D'){ cardNum += 1; symbol[cardNum-1]='d'; goto getRank; }else if(inputStr[i] == 'c'||inputStr[i]=='C'){ cardNum += 1; symbol[cardNum-1]='c'; goto getRank; }else if(inputStr[i] == ' '||inputStr[i]==',') { goto next; }else{ exception: outputStr = "Please check your input format"; ui->textBrowser->setText(outputStr); return false; } getRank: i++; if(inputStr[i]=='a'||inputStr[i]=='A'){ rank[cardNum-1]=14; }else if(inputStr[i]=='k'||inputStr[i]=='K'){ rank[cardNum-1]=13; }else if(inputStr[i]=='q'||inputStr[i]=='Q'){ rank[cardNum-1]=12; }else if(inputStr[i]=='j'||inputStr[i]=='J'){ rank[cardNum-1]=11; }else if(inputStr[i] == '1'){ i++; if(inputStr[i]!='0') goto exception; rank[cardNum-1]=10; }else if(inputStr[i]>='2'&&inputStr[i]<='9'){ rank[cardNum-1]=(""+inputStr[i]).toInt(); }else{ goto exception; } next: i++; }while(true); return true; } bool MainWindow::scanInputNum()//Return true if format is correct,else return false { int i =0; //inputString Index bubbleNum = 0; do{ if(inputStr[i]==nullptr||inputStr[i]=='\n') { break; } else if(inputStr[i] == ' '||inputStr[i]==','||inputStr[i]=='0') { goto next; }else if(inputStr[i]>='2'&&inputStr[i]<='9'){ bubble[bubbleNum]=(""+inputStr[i]).toInt(); bubbleNum++; }else if(inputStr[i]=='1'){ if(inputStr[i+1]=='0'){ bubble[bubbleNum]=10; bubbleNum++; }else{ bubble[bubbleNum]=1; bubbleNum++; } } else{ //exception: outputStr = "Please check your input format"; ui->textBrowser->setText(outputStr); return false; } next: i++; }while(bubbleNum<10); return true; } void MainWindow::printCard(){ for (int i=0;itextBrowser->setText(outputStr); } void MainWindow::printBubble(QGraphicsScene* scene,int nowY){ QGraphicsTextItem *text; for (int i=0;itextBrowser->setText(outputStr); int nowX = 5; for (int i =0;iaddText(QString::number(bubble[i])); text->setPos(nowX+bubble[i]*5-6,nowY*105+41); scene->addEllipse(nowX,(nowY*105)+((10-bubble[i])*5),bubble[i]*10,bubble[i]*10); nowX +=bubble[i]*10+5; } ui->graphicsView->setScene(scene); ui->graphicsView->show(); } bool MainWindow::isBigger(int a,int b){ //Return true if card a> card b, else return false if(symbol[a]>symbol[b]){ return true; }else if(symbol[a]rank[b]){ return true; }else{ return false; } } bool MainWindow::isSmaller(int a,int b){ //Return true if card a> card b, else return false if(symbol[a]symbol[b]){ return false; } //Determine rank if(rank[a]b, else return false if(str=="int"){ if(aj;k--) {//Move back rank[k] = rank[k-1]; symbol[k] = symbol[k-1]; } rank[j] = tempRank; symbol[j] = tempSymbol; printCard(); } } } } void MainWindow::selectionSort(){ int selectedCount=0; int indexMax = selectedCount; //Find Max do{ indexMax = selectedCount; for (int j=selectedCount+1;j 1) { toIndex--; for (int i = 0; i < toIndex; i++) { if (isSmaller(bubble[i],bubble[i+1],"int")==true) { int temp = bubble[i]; bubble[i] = bubble[i+1]; bubble[i+1]=temp; printBubble(scene,nowY++); } } } } void MainWindow::on_pushButton_insert_clicked() { cardNum = 0; outputStr = "Insertion Sort:\n"; inputStr = ui->lineEdit->text(); if(scanInput()==false) return; printCard(); insertionSort(); } void MainWindow::on_pushButton_select_clicked() { cardNum = 0; outputStr = "Selection Sort:\n"; inputStr = ui->lineEdit->text(); if(scanInput()==false) return; printCard(); selectionSort(); } void MainWindow::on_pushButton_bubble_clicked() { QGraphicsScene* scene = new QGraphicsScene; outputStr = "Bubble Sort:\n"; inputStr = ui->lineEdit->text(); if(scanInputNum()==false) return; printBubble(scene,0); bubbleSort(scene); }