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