鱼C论坛

 找回密码
 立即注册
查看: 2118|回复: 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”这样的字符,它会怎么存储呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-3 16:57:14 | 显示全部楼层
数组是一段连续空间,不明白你想要问什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

#define MAX 1024


int main(void)
{
        char string[MAX];
        char* stringP = string;
        int len = 0;
        int space_count = 0;
        int max_len = 0, word_len = 0;
        
        printf("请输入一个英文句子:");
        
        while((string[len++] = getchar()) != '\n');
        string[len-1] = '\0';//关键点!!!!!!!!!!!!!!!!!! 
        
        //计算空格数
        for(int i = 0; i < len; i++)
        {
                if(string[i] == ' ' || string[i] == '\0')
                {
                        space_count++; 
                        while(string[i++] != ' ');
                        max_len = (max_len > word_len)? max_len : word_len;
                        word_len = 0;
                }
                else
                {
                        word_len++;
                }
        }
        printf("分割的结果存放到result[%d][%d]的二维数组中\n", space_count, max_len);
        
        char(*matrix)[max_len] = (char(*)[max_len])malloc(sizeof(char) * space_count * (max_len+1));
        //存放数组中 
        for(int i = 0; i < space_count; i++)
        {
                for(int j = 0; j < max_len+1; j++)//这里面列加1因为要存储'\0' 
                {
                        if(*stringP != ' ' && *stringP != '\0')
                        {
                                matrix[i][j] = *stringP++;
                                continue;
                        }
                        else if(*stringP == ' ')
                        {
                                matrix[i][j] = '\0';
                                //指针指向下一个不为空的
                                while(*stringP++ != ' ');
                                break; 
                        }
                        else if(*stringP == '\0')
                        {
                                matrix[i][j] = '\0';
                                break;
                        }
                }
                matrix[i][max_len] = '\0';        
        }
        
        //计算最大字符串的长度 
        printf("打印二维数组中的数据:\n");
        
        for(int i = 0; i < space_count; i++)
        {
                for(int j = 0; j < max_len; j++)
                {
                        printf("%c", matrix[i][j]);
                }
                printf("\n");
        } 
         
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 01:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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