|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|