c++ - 无法从 'std::string' 转换为 'char'

标签 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);

}

最佳答案

你的问题不一定是 bubblesort 中的 temp 不是 char,问题是 array 被声明为 string 而不是 string[]

出现错误的原因是 array[count+1]char 类型,而 temp 是类型字符串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)。在这种情况下没有区别,因为当传递给函数时,数组会退化为指针。

由于数组是通过引用传递的,指向第一个元素的指针,在 bubblesort 中对 array 所做的任何修改实际上都会修改 main 中的数组。这就是数组“返回”的方式。

std::vector 是标准数组的一个很好的替代品,因为它会自动调整大小并且显然包含内部数组的长度,这样您就不必在传递的任何地方都传递大小一个 std::vector。您也可以像使用常规数组一样使用它。

关于c++ - 无法从 'std::string' 转换为 'char',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392739/

相关文章:

c++ - 基本成员初始化与在类声明中分配默认值

C++ GNU 链接器错误

c++ - 获取数组的所有连续相同数字 block

arrays - 在对组合数组进行排序时将已排序数组添加到重新分配的已排序数组的最佳方法

c++ - 如何在 GDB 中将参数传递给函数

c++ - 在 CFrameWnd 上创建 Ctablctrl

c++ - 验证用户输入是否有效数字[从 'char' 到 'char*' 的转换无效]

python - 在 numpy 数组的一维中跳过一个值

c++ - 创建分类音乐库的有效方法

java - 对自定义对象的 ArrayList 进行排序并在 Java 中重新排序