|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- // 分割字符串。用户输入一个英文句子,你的程序将这个字符串按空格进行分割,
- //返回由单词组成的二维数组
- //不论是一个空格还是多个空格,你的程序都能够正确识别出单词来
- int main()
- {
- char str1[100];
- printf("enter a sentence:");
- fgets(str1, 100, stdin);
- printf("%s\n",str1);
-
- int i = 0,kongge = 0;
- do
- {
- if(str1[i] ==' ')
- {
- kongge++;
- }
- i++;
- }while(str1[i] != '\0');
-
-
- int string_num = 0;
- if(str1[0] == ' ')
- {
- string_num = kongge;
- }
- else
- {
- string_num = kongge + 1;
- }
-
- int j = 0,z = 0,m = 0;
- char array[string_num][1];
- int k = 0;
- do
- {
- if(str1[k] !=' ')
- {
- *(*(array + j) + m) = str1[k]; //将字符一个个存进二维数组,如何遇到空格,二维数组当前行存储结束,从下一行开始存储
- printf("str1[k] = %c ,*(*(array + j) + m) = %c,j = %d,m = %d \n",str1[k],*(*(array + j) + m),j,m);
- m++;
- }
- else
- {
- printf("*(array + j) = %s,j = %d,m = %d \n",array[j],j,m);
- j++;
- m = 0;
- }
- k++;
-
- }while(str1[k] != '\0');
-
- // printf("kong = %d \n",kongge);
- // printf(" %c",str1[2]);
- for(z = 0; z<string_num; z++)
- {
- printf("%s\n",array[z]);
- }
-
- }
复制代码
因为你的35行定义二维数组的时候第二维长度不对,导致第一个字符串占用了后面字符串的位置,然后又被后面的覆盖了。
比如输入: abc de fg
那么第一个字符串一个是abc,但是你得意的第二维长度为1,所及就会挤占后面的位置,读到第二个字符串de的时候就会覆盖掉bc,再读到fg的时候,就会覆盖掉e
此外二维数组的每一行末尾你没有加'\0',那么在%s打印的时候就不会按照行打印,%s是遇到\0'才停止
帮你修改了一下,四处修改。做了注释
- #include <stdio.h>
- // 分割字符串。用户输入一个英文句子,你的程序将这个字符串按空格进行分割,
- //返回由单词组成的二维数组
- //不论是一个空格还是多个空格,你的程序都能够正确识别出单词来
- int main()
- {
- char str1[100];
- printf("enter a sentence:");
- fgets(str1, 100, stdin);
- printf("%s\n",str1);
-
- int i = 0,kongge = 0,len=0,maxlen=0;//第一处、加了两个变量,找最长的字符串
- do //第二处、在这个循环中,添加了几行代码,除了找空格数以外,再找一下最长连续字符串的长度
- {
- if(str1[i] ==' ')
- {
- kongge++;
- if(len>maxlen)
- maxlen=len;
- len=0;
- }
- else
- len++;
- i++;
- }while(str1[i] != '\0');
-
-
- int string_num = 0;
- if(str1[0] == ' ')
- {
- string_num = kongge;
- }
- else
- {
- string_num = kongge + 1;
- }
-
- int j = 0,z = 0,m = 0;
- char array[string_num][maxlen+1]; //第三处、这里的第二维是最长字符串长度+1,需要存放末尾的'\0'
- int k = 0;
- do
- {
- if(str1[k] !=' ')
- {
- *(*(array + j) + m) = str1[k]; //第四处、将字符一个个存进二维数组,如何遇到空格,二维数组当前行存储结束,从下一行开始存储
- printf("str1[k] = %c ,*(*(array + j) + m) = %c,j = %d,m = %d \n",str1[k],*(*(array + j) + m),j,m);
- m++;
- }
- else
- {
- *(*(array + j) + m) = '\0';//末尾添加'\0'
- printf("*(array + j) = %s,j = %d,m = %d \n",array[j],j,m);
- j++;
- m = 0;
- }
-
- k++;
-
- }while(str1[k] != '\0');
-
- // printf("kong = %d \n",kongge);
- // printf(" %c",str1[2]);
- for(z = 0; z<string_num; z++)
- {
- printf("%s\n",array[z]);
- }
- printf("%d,%d",maxlen,string_num);
-
- }
复制代码
|
|