首页 > 解决方案 > 如何使用指针从二维字符数组中创建一个句子

问题描述

我是 C 的新手,所以如果我不够清楚,请耐心等待。我有一个任务,我需要创建一个函数来获取平方字符矩阵并从中创建一个字符串。该函数最终应该返回一个指向字符串的指针,以便在 main 中我可以用它初始化一个字符串并在最后打印它。

(我也被限制在这个函数中只使用指针而不是常规数组语法)

例如矩阵是:

R O M E 
G O A L
H E A D
D E A D

我想做一个这样的句子:"ROME GOAL HEAD DEAD"

我试图制作一个仅在矩阵行上运行的 for 循环,这样我就可以在我使用的第一行strcpy()和另一行中将每一行复制到我之前已经准备好的字符串(其中有足够的空间) strcat()

没啥事儿。

对不起我的英语,谢谢。

char * makeString(char *smallMat, int rows, char *pStr ) {
    int i;
    char sentence[(rows * rows) + rows + rows];
    pStr = &sentence;
    for (i = 0; i < rows; ++i) {
        if (i == 0) {
            strcpy(sentence, *(smallMat + i));
        }
        else{
            strcat(sentence, ' ' + *(smallMat + i));
        }
    }
    return pStr;
}

标签: carrayspointerschar

解决方案


正如@anonmess 指出的那样,您不能将strcpy()etc. 用于非 0 终止字符序列。正如您自己所说,任务是使用指针。如果您使用过strcpy()(并且如果有效),您将解决该作业;)

这是一个不使用的完整解决方案pStr

#include <stdio.h>  // printf()
#include <stdlib.h> // malloc()

static char smallMat[4][4] = {
    { 'R', 'O', 'M', 'E' },
    { 'G', 'O', 'A', 'L' },
    { 'H', 'E', 'A', 'D' },
    { 'D', 'E', 'A', 'D' }
};

char* makeString(char* smallMat, int rows) {
  int currentRow, currentColumn;

  /* space for all characters (rows * rows)
   * + one character for each space + terminating '\0'. */
  char* sentence = malloc((rows * rows) + rows);

  char* p = sentence;

  for (currentRow = 0; currentRow < rows; ++currentRow) {
    for (currentColumn = 0; currentColumn < rows; ++currentColumn) {
      *p++ = *(smallMat + (currentRow * rows) + currentColumn);
    }
    *p++ = ' ';
  }
  *--p = '\0'; /* replace the last space with terminating 0,
                * so it can be printed. */
  return sentence;
}

int main() {
  char* output = makeString(smallMat, 4);
  printf(output);
  free(output);
  return 0;
}

推荐阅读