1.题目描述
输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop
作为最后输入的字符串。
输入
输入一段字符,以stop
作为最后输入的字符串。
样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
题目大家应该都能读懂把,就是输入比如
My name is Amy
My2个字符+name4个字符+is2个字符+Amy3个字符=11个字符
name最长且是第一个出现的,所以打印出来
你再输入stop时,结束循环了。
最后调试的结果如下
代码如下:
方法一:
#include<string.h>
int main()
{
int i, length;
char str[100];
int j = 0;//记录最长字符后的那一个空格所在的下标
while (1)//一直要输入字符,不知道结束,
{
gets(str);
int a = 0;//用来记录总的字符数
int b = 0;//用来记录每个单词的字母数
int max = 0;//记录最长单词字母数,刚开始没有输入字符,就是0;
length = strlen(str);
if (strcmp(str, "stop") == 0)
{
break;//输入stop时,跳出循环
}
else
{
for (i = 0; i <= length; i++)
{
if (str[i] != ' ' && str[i] != '\0')
{
a++;
b++;
}
//遇到空格,前后两个字符串的分开
if (str[i] == ' ' || str[i] == '\0')
{
if (b > max)//b统计好了每个字符串数,轮流与max对比
{
max = b, j = i;//j=i,把最长字符串后的那个空格的下标给j;
}
b = 0;
}
}
}
printf("%d ", a);
for (i = j - max; i < j; i++)//i=j-max就是最长字符串第一个字符的下标
{
printf("%c", str[i]);
}
printf("\n");
}
return 0;
}
strcmp函数:(判断两个字符串是否相等)
strcmp函数的比较规则是按照字典序进行比较,即逐个字符比较。具体的比较过程如下:
- 若str1小于str2,则返回负整数,即小于0的数。
- 若str1和str2相等,则返回0。
- 若str1大于str2,则返回正整数,即大于0的数。
#include<string.h>
int main(void)
{
int ret,a;
char str_1[] = "abc";
char str_2[] = "abc";
char str_3[] = "abC";
ret = strcmp(str_1, str_2);
a = strcmp(str_2, str_3);
printf("%d\n", ret);
printf("%d", a);
return 0;
}
ret=0,因为两个字符串相等,a=1,因为c的ASCII码 比C大,返回1;
方法二:(难理解)(后面学到了再讲)
#include<string.h>
int main(void)
{
char arr1[1000];
char arr2[1000];
fgets(arr1, 1000, stdin);
for (;;) {
if (strncmp(arr1, "stop", 4) == 0 && arr1[4] == '\n')
break;
int sum = 0, maxlen = 0;
char* p;
p = strtok(arr1, " \t\n");
while (p) {
int len = strlen(p);
if (len > maxlen) {
maxlen = len;
strcpy(arr2, p);
}
sum += len;
p = strtok(NULL, " \t\n");
}
printf("%d %s\n", sum, arr2);
fgets(arr1, 1000, stdin);
}
return 0;
}