【发布时间】:2021-06-03 03:35:19
【问题描述】:
假设 char 的每一行都以“E”字符结尾,最后一行以“T”字符结尾。我正在努力打印出用户给出的字符行,不包括终止字符。
- 必须使用 malloc()、calloc()、realloc() 和 free() 函数之一。
示例输入和输出可能是这样的:
| Input | Output |
|---|---|
| A B C E V F E K T |
A B C V F K |
我的尝试:
#include <iostream>
#include <sstream>
#include <string>
#include <math.h>
#include <vector>
#include <stdio.h>
using namespace std;
int main()
{
char c;
int rowsize = 0 ,colsize = 0;
char** chararr;
chararr = (char**)malloc(sizeof(char*));
vector<int> colsizes;
char chars[20];
do {
cin >> c;
colsize++;
for(int i=0; i<colsize;i++) {
chars[i] = c;
}
if ( c == 'E') {
++rowsize;
colsizes.push_back(colsize);
chararr = (char**)realloc(chararr,rowsize*sizeof(char*));
for (int i = 0; i < rowsize; ++i){
*(chararr + i) = (char*)malloc(colsizes[i] * sizeof(char));
for (int j = 0; j < colsizes[i]; ++j) {
chararr[i][j] = chars[j];
}
}
colsize = 0 ;
continue;
}
}while(c != 'T');
colsizes.push_back(colsize);
for (int i = 0; i < rowsize; ++i){
for (int j = 0; j < colsizes[i]; ++j) {
std::cout << chararr[i][j] << " ";
}
std::cout << endl;
}
}
【问题讨论】:
-
您应该选择一种语言。普通 C 解决方案将本机使用 alloc 系列,普通 C++ 解决方案应使用向量。 IHMO,如果非要使用
alloc,最好用C...不过目前的代码是C++,没有使用malloc... -
奇怪的是你不得不使用 malloc 系列函数,因为 C++ 有更合适的函数
new/delete和new[]/delete[]使用起来更安全(因为它们不只是分配内存) -
你在这门课上学的是C还是C++?这些是不同的语言。
标签: c++ arrays c dynamic-memory-allocation jagged-arrays