【发布时间】:2019-12-28 03:58:54
【问题描述】:
我正在尝试回答一个日常编码问题。给定一个完成的多米诺骨牌图案。例如,如果输入字符数组是“r,.,.,.,l,.,.”你完成的图案应该是“r,r,.,l,l,.,.”。
两个问题。当我主要将 char 数组声明为指针时,我得到了许多初始化程序的错误。我通过将输入数组声明为数组来解决此问题。但我想使用指针。所以这是不可接受的。第二个问题。在 Dominos 函数的第 11 行,list[i] = 'r';产生写访问冲突错误。这是为什么呢?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
char* Dominos(char* list, int size) {
int i = 0, medianOffset = 0, count = 0, odd = 0, post = 0;
if (list[i] == 'r') {
while (list[i] != 'l') {
list[i] = 'r';
i++;
count++;
}
medianOffset = (count - 1) / 2;
odd = count % 2;
post = i;
if (odd == 1) {//putting lefts down when there is no dot seperating l and r
for (int j = 0; j < medianOffset; j++) {
list[i] = 'l';
i--;
}
}
else {//put a dot between l and r
for (int j = 0; j < medianOffset; j++) {
//list[i] = 'l';
i--;
}
list[i] = '.';
}
}
else if (list[i] == 'l') {
}
else {
}
return list;
}
int main() {
char *c = { 'r', '.', '.', '.', '.', '.', '.', '.', '.', '.'};
int size = 10;
for (int i = 0; i < size; i++) {
cout << c[i];
}
cout<<endl;
char* list = Dominos(c, 10);
for (int i = 0; i < 10; i++) {
cout << *(list+i);
}
cout << endl;
system("PAUSE");
return 0;
}
【问题讨论】: