gpt4 book ai didi

c++ - 指针运算和冒泡排序 (C++)

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:49 24 4
gpt4 key购买 nike

我似乎无法弄清楚我做错了什么。我今天在类里面做了笔记,但不幸的是我的 OneNote 崩溃了,把我今天的所有笔记都删除了。我知道我缺少一些东西,但我无法弄清楚。我翻遍了我的课本,甚至在网上看了一个多小时。我似乎找不到任何有用的东西。

我知道我的错误可能是我在 if 或 set 变量语句中使用了 charPtr++,但我不记得如何做到这一点。如何检查一个元素是否小于另一个元素?

我们应该使用指针算术来编写 10 个元素的降序冒泡排序。有人可以解释我做错了什么以及为什么我的程序只输出原始数组吗?谢谢!

我们也不能使用括号或偏移符号。

#include <iostream>
#include <fstream>

using namespace std;

int main() {

// DRIVER PROGRAM

char *characters, *charPtr = nullptr; // Array or undefined size.
fstream fs; // file stream for file arithmetic


fs.open("array.txt", ios::in); // Open the file
char currentChar; // Used to check if the file can still be read.
int counter = 0; // Counter to check how many elements are in the array.
while (fs >> currentChar) { // While data can be put into counter, continue...

counter++; // Add one to counter

}

characters = new char[counter]; // Sets size of array.
charPtr = characters;

fs.clear(); // Clears eof flag.
fs.seekg(0, ios::beg); // Sets pointer back to the beginning. CHECK IF YOU CAN REMOVE THIS LINE AND THE ONE ABOVE.

for (int i = 0; i < counter; i++) { // While less than the size of array.

fs >> charPtr; // Write to charPtr
cout << *charPtr << " "; // Output array.
charPtr++; // Move to next element

}

fs.close(); // Close file
putchar('\n'); // Output newline efficiently.
charPtr = characters;

// BUBBLE SORT

bool swapChar;
char temp;

do {

swapChar = false;


for(int count = 0; count < (counter - 1); count++) {

if (*(charPtr) < *(charPtr++)) { // If character at 0 is less than the character at 1

temp = *(charPtr); // Set temp to character at 0
*(charPtr) = *(charPtr++); // set character at 0 to character at 1
*(charPtr++) = temp; // set character at 1 to temp
swapChar = true; // set swap to true
cout << *charPtr << " "; // output current swap
charPtr++; // add 1 to charPtr
}

}
} while (swapChar == true);

}

最佳答案

请记住 charPtr++ 会自增。在下面的代码块中,您进行了 4 次递增,而您本以为只有一次。您应该将其替换为 *(charPtr+1)

if (*(charPtr) < *(charPtr++)) { // If character at 0 is less than the character at 1 
temp = *(charPtr); // Set temp to character at 0
*(charPtr) = *(charPtr++); // set character at 0 to character at 1
*(charPtr++) = temp; // set character at 1 to temp
swapChar = true; // set swap to true
cout << *charPtr << " "; // output current swap
charPtr++; // add 1 to charPtr
}

关于c++ - 指针运算和冒泡排序 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42241299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com