C语言--字符串的统计(一个题目)

题目描述

题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若于个字符串,求这些字符串的长度和,并输出最长字串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

样例展示

样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
提示:
字符串长度不超过100。

我的思路

用gets()来输入字符串,因为输入的字符串不止一条,gets()要放在循环中,如果输入的是stop就跳出循环。题目要求输出字符串的长度和(这里我用count 表示),所以要用内循环来产生各元素,不是空格就count++。题目还要求输出最长字符串的内容,所以我先找到最大字符串在哪里和长度再打印即可。

代码

int main()
{
	char ch[100];
	int count = 0, max = 0, part = 0;//count是字符串长度和,max是最大字符串的个数,part是每部分字符串的个数
	int i = 0;//当做下标
	int k = 0;//k是最大字符串后面的空格下标,找到k,就相当于找到了最大字符串在哪
	
	while (1)
	{
		gets(ch);
		count = 0; part = 0; max = 0; k = 0;
		if (strcmp("stop", ch) == 0)
		{
			break;
		}
		else
		{
			for (i = 0; i <= strlen(ch); i++)
			{
				if (ch[i] != ' ' && ch[i] != '\0')
				{
					count++;
					part++;
				}
				else //遇到了空格或'\0',就比较part和max,max<part 就交换,同时要记录下标k,因为等下要打印最大字符.
					//我一开始没有考虑到'\0',
					//有空格才能比较和交换,那最后的字符串最长呢后面没有空格,所以有漏洞。
					// 所以我把i<strlen(ch),改成了i<=strlen(ch),使得最后一个'\0'被取到。
					// 当取到'\0'时也比较一次,这样就不会漏掉最后的字符串最大的这种情况。
					
				{
					if (max < part)
					{
						max = part;
						k = i;

					}
					part = 0;//无论有没有交换,遇到了空格 part 就从0开始

				}
			}
			//打印
			printf("%d ", count);
			
				for (i = k - max; i < k; i++)//找到了k就可以定位,找到了max就可以决定打印多长
				{
					printf("%c", ch[i]);
				}
				printf("\n");
		}
	}
	return 0;
}

运行结果

I love china
10 china
My name is Amy
11 name
My name is Jane
12 name
stop

创作不易,若对您有帮助可以点赞支持一下吗在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值