由于其他成员的建议而完全改变了。大多数问题解决了,仍有问题。现在不会从main中的数组中输出任何名称。不确定我是否正确地将它们从功能上传回来。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void bubblesort(string[], const int);
int sub = 0;
int main()
{
const int maxsize = 100;
string friendArray[maxsize];
ifstream friends;
friends.open("myFriends.dat");
while (sub < maxsize)
{
getline(friends, friendArray[sub]);
sub++;
}
bubblesort(friendArray, maxsize);
cout<<friendArray[0]<<" "<<friendArray[1]<<" "<<friendArray[2];
system("pause");
return 0;
}
void bubblesort(string *array, const int size)
{
bool swap;
string temp;
do
{
swap = false;
for (int count = 1; count < (size - 1); count++)
{
if(array[count-1] >array[count])
{
temp = array[count-1];
array[count-1] = array[count];
array[count] = temp;
swap = true;
}
}
}
while(swap);
}
答案 0 :(得分:5)
您的问题不一定temp
bubblesort
内char
不是array
,问题是string
被声明为string[]
而不是array[count+1]
。
您收到错误的原因是char
类型为temp
,string
类型为std::swap
。 maxsize
需要两个相同类型的元素。
然而,这可能是您遇到的问题中最少的,您的代码由于很多原因而无法编译。不仅如此,而且您在每次迭代时都会将bubblesort
传递给#include <iostream>
void bubblesort(std::string array[], size_t size)
{
bool bSwapped;
std::string temp;
do
{
bSwapped = false;
for (size_t count = 1; count < size; count++)
{
if(array[count-1] > array[count])
{
std::swap(array[count-1], array[count]);
bSwapped = true;
}
}
}
while(bSwapped);
}
int main(void)
{
std::string array[] = { "def", "ghk", "abc", "world", "hello" };
bubblesort(array, sizeof(array)/sizeof(*array));
for (size_t i = 0; i < sizeof(array)/sizeof(*array); ++i)
std::cout << array[i] + " ";
std::cout << std::endl;
return 0;
}
。你的逻辑和语法都存在缺陷。
编辑:由于您仍然无法使排序正常工作,因此以下是您的代码的工作修改:
bubblesort
void bubblesort(std::string *array, size_t size)
也可以写成:array
。在这种情况下没有区别,因为当传递给函数时,数组会衰减为指针。
由于数组是通过引用传递的,指向第一个元素的指针,bubblesort
内对main
所做的任何修改实际上都会在std::vector
中修改数组。这就是数组被“返回”的方式。
std::vector
是标准数组的一个很好的替代品,因为它会自动调整大小,显然包含内部数组的长度,因此您无需在传递{{1}}的任何地方传递大小。您也可以像使用常规数组一样使用它。
答案 1 :(得分:4)
temp是一个字符串,array[count]
是一个char(因为std :: string是char元素的向量。)我不确定你在这里尝试做什么,但是编译器是正确的 - 您不能将字符串分配给字符串。
您可以将temp
更改为char,因为您只需为其分配一个char,然后将其分配给数组元素,该数组也是char。
答案 2 :(得分:4)
您需要将temp
声明为char
。您可以使用std::swap
来避免将来出现此类错误:
std::swap(array[count], array[count+1]);
这会使你的代码编译,但它不会做你想做的事(bubblesort)。问题是你传递的是一个字符串(也就是字符的“数组”),而不是一个字符串数组,这是一个非常失败的意义上的“字符数组数组”。您的bubblesort需要接受string *array
作为其第一个参数。