| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 软大头 于 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[1024][1024]; 
        printf("请输入一个英文句子:"); 
        ch=getchar(); 
        while(ch!='\n') 
        { 
                for(j=0;;j++) 
                { 
                        if(ch!=' ') 
                        { 
                                str1[m][j]=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[m][n]; 
 
(还一部分在2楼,因为那部分在帖子里看的时候字体莫名奇妙就变了,而且还少了好多) 
 
大家帮我看看这是为啥啊? 
还有我都学到这了还没感觉到指针的好处,写题先想到数组而不去用指针,是不是问题有点大了? 
 
来迟了 
- #include <stdio.h>
 
  
- int main()
 
 - {
 
 -     int i=0,j=0,k=0,m=0,n=0;
 
 -     char ch;
 
 -     char str1[1024][1024];
 
 -     printf("请输入一个英文句子:");
 
 -     ch=getchar();
 
 -     while(ch!='\n')
 
 -     {
 
 -         for(j=0;;j++)
 
 -         {
 
 -             n = n>j ? n:j;
 
 -             if(ch != ' ' && ch != '\n')
 
 -             {
 
 -                 str1[m][j]=ch;
 
 -             }
 
 -             else
 
 -             {
 
 -                 str1[m][j]= '\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[m][n];
 
 -     for (i = 0; i < m; i++)
 
 -     {
 
 -         j = 0;
 
 -         while((str2[i][j] = str1[i][j])) ++j;
 
 -         /*
 
 -         for (j = 0; j < n; j++)
 
 -         {
 
 -             str2[i][j] = str1[i][j];
 
 -         }
 
 -         str2[i][j] = '\0';
 
 -         */
 
 -     }
 
 -     printf("分割结果已存放到result[%d][%d]的二维数组中...",m,n);
 
 -     printf("现在依次打印每个单词:\n");
 
 -     for (i = 0; i < m; i++)
 
 -     {
 
 -         printf("%s\n",str2[i]);
 
 -     }
 
 -     return 0;
 
  
- }
 
 
  复制代码 
 
 
 |   
 
 
 
 |