题目描述
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若于个字符串,求这些字符串的长度和,并输出最长字串内容,如果有多个输出最先出现的那个字符串。以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
创作不易,若对您有帮助可以点赞支持一下吗