C++将值传递给函数中的2D字符数组
C++ Passing values to 2D char array in a function
我正在尝试使用一个函数对一个充满单词的char数组进行排序。我目前遇到的问题是,在我的sortNames函数中,我在下面的部分得到了错误,"表达式必须是可修改的左值">
hold = nameArr[ii];
nameArr[ii] = nameArr[jj];
nameArr[jj] = hold;
我猜这是因为出于某种原因,我试图通过数组传递值。我很难理解参考文献和指针之类的东西,我想这也会伤害我。任何帮助都将是非常棒的,提前感谢您。
这是我当前的代码。。。
#include <iostream>
#include <string>
using namespace std;
char nameArr[20][15]; // array to store the 20 values
int val = 0; // variable to pass values to the array
int x = 0; // loop counter outside functions
//Function prototypes
void getNames(char (&nameArr)[20][15], int &val);
void sortNames( char(&nameArr)[20][15]);
//getNames Function
void getNames(char (&nameArr)[20][15], int &val)
{
int i = 0; // loop counter
cout << "Awesome, now lets input those names...n" << endl;
for (i = 0; i < val; i++)
{
cout << "nNAME " << i+1 << ": " << ' ';
cin >> nameArr[i];
}
cout << "nnnThese are the names that you inserted:n" << endl;
for (i = 0; i < val; i++)
{
cout << nameArr[i] << "n" << endl;
}
}
// sortNames function
void sortNames( char(&nameArr)[20][15])
{
int n = 15; // max length of word
int ii = 0; // loop counter
int jj = 0; // other counter
string hold; // holding array
for (int ii = 0 ; ii < n ; ii++)
{
for (int jj = ii + 1; jj < n; jj++)
{
if (nameArr[ii] > nameArr[jj])
{
hold = nameArr[ii];
nameArr[ii] = nameArr[jj];
nameArr[jj] = hold;
}
}
}
}
int main()
{
cout << "NAME SORTER!nnPlease enter in the amount of names you wish to enter: " << ' ';
cin >> val;
getNames(nameArr, val);
cout << "nnnAlright, lets sort now..." << endl;
sortNames(nameArr);
cout << "nHere are the results:n" << endl;
for (x = 0; x < val; x++)
{
cout << nameArr[x] << "n" << endl;
}
system("pause");
}
这里的主要问题是,您试图在两个固定大小的数组上使用赋值运算符,这是不合法的。考虑以下代码:
int a[2] = {0, 0};
int b[2] = {1, 1};
a = b;
这会产生与您相同的错误。在您提到的行中,您正在对char[15]
数组执行相同的操作。
要解决问题,您需要动态分配char
数组/使用指针,或者更简单的解决方案是将char[][]
数组更改为string[]
数组。
话虽如此,这里有很多东西你可以清理:
- 您有一些全局声明的变量,这些变量可以在main或更低版本中定义
- 您可以在
for
循环中声明循环计数器,而不是像在sortNames
函数中那样预先声明 - 在
sortNames
中,您将两次声明几个变量
我将为dwcanilla的答案添加一些内容。
你会想把你的功能原型和标题改成更像这样的东西:
void getNames(char ** & arr, int val);
void sortNames(char ** & arr);
这意味着函数接受对c字符串数组的引用;也就是说,当您在函数中处理数组时,您正在修改您传递的实际数组,而不仅仅是一个副本。此外,我认为您可以通过getNames的值传递整数。
其次,全局变量通常是个坏主意。由于可以将数组引用直接传递给函数,因此可能需要在main中声明nameArr和其他全局变量。
第三,在getNames中,您将无法使用cin直接分配您的c字符串。
编辑:这是一个更好的方法——获取Cstring 的控制台输入
最后,<运算符不能像在排序函数中使用它那样处理c字符串。请改用strcmp()(并确保包含cstring标头):
if(strcmp(arr[ii], arr[jj]) > 0)
相关文章:
- 打印第二列时的2d字符矢量打印空间
- 如何打印 2D 字符数组C++
- 当字符串为"\0"时如何结束 2D 字符数组?
- 如何在 2D 字符数组中打印 [x][y] 元素的地址?(C++)
- 传递动态分配的 2D 字符数组会导致分段错误
- 将字符串与给定的 2d 字符数组匹配
- 打印一行 2D 字符数组 (C++)
- 在C++中打印 2D 字符数组
- 尝试在c++中将文本文件(ifstream)转换为2D字符数组
- 访问动态 2D 字符数组时引发访问冲突异常
- 如何在Visual C 中读取具有字符(无间距)的TXT文件,并将其存储到2D字符阵列中
- C++ 2D 字符数组到字符串
- 使用气泡排序从类中对 2D 字符和 Int 数组进行排序
- 如何在标头中声明后初始化 2D 字符数组
- C++对2D字符数组进行气泡排序
- 声明并分配给 2D 字符指针
- C++将值传递给函数中的2D字符数组
- 包含2D字符数组的构造函数
- 如何从文件中将名称插入2D字符数组
- 输入和输出的2D字符数组问题