无法从'std :: string'转换为'char'

时间:2011-12-05 22:22:55

标签: c++ arrays sorting

由于其他成员的建议而完全改变了。大多数问题解决了,仍有问题。现在不会从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);

}

3 个答案:

答案 0 :(得分:5)

您的问题不一定temp bubblesortchar不是array,问题是string被声明为string[]而不是array[count+1]

您收到错误的原因是char类型为tempstring类型为std::swapmaxsize需要两个相同类型的元素。

然而,这可能是您遇到的问题中最少的,您的代码由于很多原因而无法编译。不仅如此,而且您在每次迭代时都会将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作为其第一个参数。