c语言统计一下输入一段字符,包含空格的,统计一下每个小字符串的长度,和有几个小字符串。
比如输入abcd efghw hiik有三个小字符串,长度是4 5 4
怎么弄好
/* 程序功能:从键盘接收字符串输入,然后以行为单位 转存至文件 然后从文件中提取所录入的字符串 并有序输出至屏幕 单个字符长度不能超过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; }
#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; }