c语言统计一下输入一段字符,包含空格的,统计一下每个小字符串的长度,和有几个小字符串。
比如输入abcd efghw hiik有三个小字符串,长度是4 5 4
怎么弄好
2015-01-08 12:28
程序代码:
/*
程序功能:从键盘接收字符串输入,然后以行为单位 转存至文件
然后从文件中提取所录入的字符串 并有序输出至屏幕
单个字符长度不能超过255
控制台录入以*****(5连*)作为结束标记
排序算法:冒泡
*/
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
char str[256]={'\0'};
char ** dstr=NULL;
int cout=0;
int i,j;
char * tmp;
if((fp=fopen("d:\\123.txt","w"))==NULL)
{
printf("打开文件失败!\n");
return 0;
}
//接受键盘输入并保存到指定文件
while(1)
{
scanf("%s",str);
if(strcmp(str,"*****")==0) break; //人为限定为以5连*作为输入结束标记
fprintf(fp,"%s\n",str);
cout++;
}
//打开曾输入的字符串的文件,为排序输出做准备工作
fclose(fp);
fp=fopen("d:\\123.txt","rb");
if(fp==NULL)
{
printf("打开文件失败!\n");
return 0;
}
//为字符串分配空间
dstr=(char**)malloc(cout*sizeof(char*));
for(i=0;i<cout;i++)
{
dstr[i] = (char *)malloc(sizeof(char)*256);
memset(dstr[i],0,sizeof(dstr[i]));
}
//从文件扫描到字符串指针
for(i=0;i<cout;i++)
{
fscanf(fp,"%s",*(dstr+i));
}
//以下双循环是字符串排序部分
for(i=0;i<cout;i++)
{
for(j=i;j<cout;j++)
{
if(strcmp(*(dstr+i),*(dstr+j))>0)
{
tmp=*(dstr+i);
*(dstr+i)=*(dstr+j);
*(dstr+j)=tmp;
}
}
}
//排序后输出
printf("-------------------------\n");
for(i=0;i<cout;i++)
{
printf("%s\n",*(dstr+i));
}
fclose(fp);
free(dstr);
return 0;
}

2015-01-08 13:08
程序代码:#include <stdio.h>
int main()
{
for( unsigned strcount=0, substrsize=0, last_is_space=1; ; )
{
int c = getchar();
if( c==EOF || c=='\n' || c==' ' )
{
if( !last_is_space )
{
printf( "%u ", substrsize );
++strcount;
substrsize = 0;
last_is_space = 1;
}
if( c==EOF || c=='\n' )
{
printf( "Count=%u\n", strcount );
break;
}
}
else
{
++substrsize;
last_is_space = 0;
}
}
return 0;
}
2015-01-08 15:24
2015-01-08 16:42
2015-01-08 17:59

2015-01-09 08:48
2015-01-09 09:09
2015-01-09 09:11