鱼C论坛

 找回密码
 立即注册
查看: 2583|回复: 2

带你学C26课后题

[复制链接]
发表于 2019-12-2 14:33:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原问题动手0:https://fishc.com.cn/forum.php?m ... peid%26typeid%3D570

不太明白为什么要记录字符串位置,生成1024个字符串数组后再向其中添加字符串,字符串是怎么存储的?是连续的从头存储,还是不连续存储呢?

比如我申请char string[1024]   然后我存储  “sdf  fdf  df”这样的字符,它会怎么存储呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-3 16:57:14 | 显示全部楼层
数组是一段连续空间,不明白你想要问什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-4 13:28:02 | 显示全部楼层
windows 发表于 2019-12-3 16:57
数组是一段连续空间,不明白你想要问什么

不太明白那道题为什么要记录地址。不记录地址,用指针顺序访问的时候出错了。
这个是我当时写得代码,就是得不到准确答案,但也不知道错在哪
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define MAX 1024


  4. int main(void)
  5. {
  6.         char string[MAX];
  7.         char* stringP = string;
  8.         int len = 0;
  9.         int space_count = 0;
  10.         int max_len = 0, word_len = 0;
  11.        
  12.         printf("请输入一个英文句子:");
  13.        
  14.         while((string[len++] = getchar()) != '\n');
  15.         string[len-1] = '\0';//关键点!!!!!!!!!!!!!!!!!!
  16.        
  17.         //计算空格数
  18.         for(int i = 0; i < len; i++)
  19.         {
  20.                 if(string[i] == ' ' || string[i] == '\0')
  21.                 {
  22.                         space_count++;
  23.                         while(string[i++] != ' ');
  24.                         max_len = (max_len > word_len)? max_len : word_len;
  25.                         word_len = 0;
  26.                 }
  27.                 else
  28.                 {
  29.                         word_len++;
  30.                 }
  31.         }
  32.         printf("分割的结果存放到result[%d][%d]的二维数组中\n", space_count, max_len);
  33.        
  34.         char(*matrix)[max_len] = (char(*)[max_len])malloc(sizeof(char) * space_count * (max_len+1));
  35.         //存放数组中
  36.         for(int i = 0; i < space_count; i++)
  37.         {
  38.                 for(int j = 0; j < max_len+1; j++)//这里面列加1因为要存储'\0'
  39.                 {
  40.                         if(*stringP != ' ' && *stringP != '\0')
  41.                         {
  42.                                 matrix[i][j] = *stringP++;
  43.                                 continue;
  44.                         }
  45.                         else if(*stringP == ' ')
  46.                         {
  47.                                 matrix[i][j] = '\0';
  48.                                 //指针指向下一个不为空的
  49.                                 while(*stringP++ != ' ');
  50.                                 break;
  51.                         }
  52.                         else if(*stringP == '\0')
  53.                         {
  54.                                 matrix[i][j] = '\0';
  55.                                 break;
  56.                         }
  57.                 }
  58.                 matrix[i][max_len] = '\0';       
  59.         }
  60.        
  61.         //计算最大字符串的长度
  62.         printf("打印二维数组中的数据:\n");
  63.        
  64.         for(int i = 0; i < space_count; i++)
  65.         {
  66.                 for(int j = 0; j < max_len; j++)
  67.                 {
  68.                         printf("%c", matrix[i][j]);
  69.                 }
  70.                 printf("\n");
  71.         }
  72.          
  73.         return 0;
  74. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表