现在的位置: 首页 > 综合 > 正文

03_统计单词个数、求阶乘、输出最短和最长的字符串

2013年11月22日 ⁄ 综合 ⁄ 共 2356字 ⁄ 字号 评论关闭

1. 题目描述:
编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。
(凡是以一个或多个空格隔开的部分就为一个单词)
输入:
输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。
输出:
可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。
样例输入:
hello how are you.
样例输出:
5 3 3 3

参考答案

#include<stdio.h>   
#include<string.h>


int main()
{
	char str[1000], index, str_len, k;
	int word_len[1000]={0};   //存放各单词长度的数组


	while(gets(str))
	{
		index=0;
		str_len = strlen(str);
		memset(word_len, 0, 1000);


		k=0;
		while((' ' == str[k]) && (k<str_len-1))//跳过开头的空格
		{
			k++;
		}


		while(k<str_len-1)
		{
			if(str[k] != ' ')//读到的是字符
			{
				word_len[index] += 1;
				k++;
			}
			else//读到的是空格
			{
				index++;
				while((k<str_len-1) && (' ' == str[k]))//跳过中间连续的空格
				{
					k++;
				}
			}
		}


		for(k=0; k<index; k++)
		{
			printf("%d ", word_len[k]);
		}
		printf("%d\n", word_len[k]);
	}
	return 0;
}

参考程序(与此题类似,但是非此题解)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main()
{
	char words[100][100];
	int	 w_index,w_num,i=0;
	char ch;
	
	printf("Input a string :\n");


	w_num = 0;
	w_index = 0;
	while((ch = getchar()) != '.')
	{
		if(ch == ' ')
		{
			if(w_index)
			{
				w_index = 0;
				w_num++;
			}
		}
		else
		{
			words[w_num][w_index++]=ch;
			words[w_num][w_index] = '\0';
		}
	}


	printf("\nThere are %d words.\n", w_num + 1);


	for(i=0; i <= w_num; i++) 
	{ 
 		printf("%s\t %d\n", words[i], strlen(words[i])); 
	} 
}

2. 题目描述:
输入n,
求y1=1!+3!+...m!(m是小于等于n的最大奇数)
y2=2!+4!+...p!(p是小于等于n的最大偶数)。
输入:
每组输入包括1个整数:n
输出:
可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2
样例输入:
4
样例输出:
7 26

参考答案

#include <stdio.h>

long int result[15]; 

//存储 1 到 14 的阶乘的结果到 result 数组中,避免重复计算
//对于long int 类型,计算到 15! 时开始溢出
void initialize()
{
	
    long int i,tmp=1; 
    
    for(i=1; i<14; i++)
	{
        tmp=tmp*i;
        result[i]=tmp;
    }   
}


int main()
{
    int n,i;
    long int sum1, sum2;
	
    initialize();
	
    while(scanf("%d",&n) != EOF)
	{
        sum1 = sum2 = 0;
		
		//直接利用 result 数组中存储的结果计算阶乘
        for(i=1; i<=n; i++)
		{
            if(i%2==1)
                sum1 += result[i];
            else
                sum2 += result[i];   
        }
        printf("%ld %ld\n", sum1 ,sum2);   
    }
    return 0;
}

3. 题目描述:
输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
输入:
输入包括多行字符串,字符串的长度len,(1<=len<=1000)。
输出:
按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
样例输入:
hello
she
sorry
he
样例输出:
he
hello
sorry

参考答案

#include<stdio.h>    
#include<string.h>  
#include <limits.h>  
  
typedef struct strs{  
    int len;   //用于记录字符串长度长度  
    char arr[1001];   //用于存储输入的字符串
}strs;  
  
strs store[10001];  
  
int main()  
{  
    int i, index = 0;  
    int max_len = INT_MIN, min_len = INT_MAX;  


    while(scanf("%s", store[index].arr) != EOF){  


        store[index].len = strlen(store[index].arr);  
          
        if(max_len < store[index].len){   //计算最大长度
            max_len = store[index].len;  
        }         
        else if(min_len > store[index].len){   //计算最小长度 
            min_len = store[index].len;  
        }  
        index++;  
    }  
      
    for(i = 0;i < index;i++){   //输出最短字符串
        if(store[i].len == min_len){  
            puts(store[i].arr);  
        }  
    }  
    
    for(i = 0;i < index;i++){   //输出最长字符串
        if(store[i].len == max_len){  
            puts(store[i].arr);  
        }  
    }  
    return 0;  
} 

抱歉!评论已关闭.