软大头 发表于 2021-10-9 12:34:38

S1E26动动手作业提问

本帖最后由 软大头 于 2021-10-9 12:58 编辑

0. 分割字符串。用户输入一个英文句子,你的程序将这个字符串按空格进行分割,返回由单词组成的二维数组。
要求:
返回的二维数组必须尽可能地节省空间(利用C语言的变长数组来实现)
不能使用现成的函数帮忙(你只能 #include <stdio.h>)
程序实现如下:
分割后的结果存放在 result 二维数组中,这个二维数组的尺寸是根据用户输入的单词长度而定的(再次提醒:不能使用 malloc 等没学过的知识噢~)


主要是我的指针还没学明白,然后就直接用数组做的,但是发现了个问题。
但是输入句子时直接打回车是不行的

我发现句子末尾再加个空格然后再回车,就成功了

这是我写的:
#include<stdio.h>
int main()
{
        int i=0,j=0,m=0,n=0;
        char ch;
        char str1;
        printf("请输入一个英文句子:");
        ch=getchar();
        while(ch!='\n')
        {
                for(j=0;;j++)
                {
                        if(ch!=' ')
                        {
                                str1=ch;
                                n= n>j ? n:j ;
                        }
                        else
                        {
                                break;
                        }
                        ch=getchar();
                }
                ch=getchar();                        //为了让单词与单词之间的空格随意添加,我才想出了这个笨办法
                        while(ch==' ')
                {
                        ch=getchar();
                }
                m++;
        }
        n=n+2;                                  //加2是因为我让n等于j的最大数,而j是从0开始的,然后还要留出放'\0'的位置
        char str2;

(还一部分在2楼,因为那部分在帖子里看的时候字体莫名奇妙就变了,而且还少了好多)

大家帮我看看这是为啥啊?
还有我都学到这了还没感觉到指针的好处,写题先想到数组而不去用指针,是不是问题有点大了?

软大头 发表于 2021-10-9 14:27:41

#include<stdio.h>
int main()
{
        int i=0,j=0,k=0,m=0,n=0;
        char ch;
        char str1;
        printf("请输入一个英文句子:");
        ch=getchar();
        while(ch!='\n')
        {
                for(j=0;;j++)
                {
                        if(ch!=' ')
                        {
                                str1=ch;
                                n= n>j ? n:j ;
                        }
                        else
                        {
                                break;
                        }
                        ch=getchar();
                }
                ch=getchar();
                        while(ch==' ')
                {
                        ch=getchar();
                }
                m++;
        }
        n=n+2;
        char str2;
        for (i = 0; i < m; i++)
    {
            for (j = 0; j < n; j++)
      {
            str2 = str1;
      }
      str2 = '\0';
    }
        printf("分割结果已存放到result[%d][%d]的二维数组中...",m,n);
        printf("现在依次打印每个单词:\n");
        for (i = 0; i < m; i++)
    {
            printf("%s\n",str2);
    }
        return 0;
       
}

软大头 发表于 2021-10-9 12:57:35

本帖最后由 软大头 于 2021-10-9 14:25 编辑

for (i = 0; i < m; i++)
    {
            for (j = 0; j < n; j++)
      {
            str2 = str1;
      }
      str2 = '\0';
    }
        printf("分割结果已存放到result[%d][%d]的二维数组中...",m,n);
        printf("现在依次打印每个单词:\n");
        for (i = 0; i < m; i++)
    {
            printf("%s\n",str2);
    }
        return 0;
}
(这是剩下的那部分)

人造人 发表于 2021-10-9 14:15:48

重新发一下代码吧

软大头 发表于 2021-10-9 14:22:06

本帖最后由 软大头 于 2021-10-9 14:27 编辑

#include<stdio.h>
int main()
{
        int i=0,j=0,k=0,m=0,n=0;
        char ch;
        char str1;
        printf("请输入一个英文句子:");
        ch=getchar();
        while(ch!='\n')
        {
                for(j=0;;j++)
                {
                        if(ch!=' ')
                        {
                                str1=ch;
                                n= n>j ? n:j ;
                        }
                        else
                        {
                                break;
                        }
                        ch=getchar();
                }
                ch=getchar();
                        while(ch==' ')
                {
                        ch=getchar();
                }
                m++;
        }
        n=n+2;
        char str2;
        for (i = 0; i < m; i++)
    {
            for (j = 0; j < n; j++)
      {
            str2 = str1;
      }
      str2 = '\0';
    }
        printf("分割结果已存放到result[%d][%d]的二维数组中...",m,n);
        printf("现在依次打印每个单词:\n");
        for (i = 0; i < m; i++)
    {
            printf("%s\n",str2);
    }
        return 0;
       
}

软大头 发表于 2021-10-9 14:23:42

本帖最后由 软大头 于 2021-10-9 14:27 编辑

for (i = 0; i < m; i++)
    {
            for (j = 0; j < n; j++)
      {
            str2 = str1i;
      }
      str2 = '\0';
    }
      printf("分割结果已存放到result[%d][%d]的二维数组中...",m,n);
      printf("现在依次打印每个单词:\n");
      for (i = 0; i < m; i++)
    {
            printf("%s\n",str2);
    }
      return 0;
}

软大头 发表于 2021-10-9 14:24:19

软大头 发表于 2021-10-9 14:23
for (i = 0; i < m; i++)
    {
            for (j = 0; j < n; j++)


不知道为啥总是字体有问题

软大头 发表于 2021-10-9 14:28:59

软大头 发表于 2021-10-9 14:24
不知道为啥总是字体有问题

大大我在置顶里改了

傻眼貓咪 发表于 2021-10-9 15:07:45

#include <stdio.h>

int main(){
    int m=0, n=0, max=0;
    char ch;
    char arr;
    printf("请输入一个英文句子:");
   
    while(1){
      ch = getchar();
      if(ch == '\n') break;
      else if(ch == ' '){
            max = (max >= (n+1) ? max : n+1);
            m++; n=0;
      }
      else arr = ch;
    }
   
    max = (max >= (n+1) ? max : n+1);
    char res;
   
    for(int i=0; i<=m; i++){
      for(int j=0; j<max; j++){
            if(arr) res = arr;
            else res = '\0';
      }
    }
    printf("分割结果已存放到result[%d][%d]的二维数组中...\n现在依次打印每个单词:\n", m+1, max);
    for (int i=0; i<=m; i++){
      for(int j=0; j<max; j++) printf("%c", res);
      printf("\n");
    }
    return 0;
}请输入一个英文句子:asd asd sdf; lsdfk
分割结果已存放到result的二维数组中...
现在依次打印每个单词:
asd
asd
sdf;
lsdfk

人造人 发表于 2021-10-9 15:08:52

来迟了
#include <stdio.h>

int main()
{
    int i=0,j=0,k=0,m=0,n=0;
    char ch;
    char str1;
    printf("请输入一个英文句子:");
    ch=getchar();
    while(ch!='\n')
    {
      for(j=0;;j++)
      {
            n = n>j ? n:j;
            if(ch != ' ' && ch != '\n')
            {
                str1=ch;
            }
            else
            {
                str1= '\0';
                break;
            }
            ch=getchar();
      }
      if(ch == '\n') break;
      ch=getchar();
      while(ch==' ')
      {
            ch=getchar();
      }
      m++;
    }
    //n=n+2;
    n=n+1;
    m += 1;
    char str2;
    for (i = 0; i < m; i++)
    {
      j = 0;
      while((str2 = str1)) ++j;
      /*
      for (j = 0; j < n; j++)
      {
            str2 = str1;
      }
      str2 = '\0';
      */
    }
    printf("分割结果已存放到result[%d][%d]的二维数组中...",m,n);
    printf("现在依次打印每个单词:\n");
    for (i = 0; i < m; i++)
    {
      printf("%s\n",str2);
    }
    return 0;

}
页: [1]
查看完整版本: S1E26动动手作业提问