c语言如何使一行字符串,按空格分开形成多个字符串,然后再记录每个已分开字符串,比出长度最长的输出。
题目描述是这样的
题目描述:输入一段字符(只含有空格和字母,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
输入
输入一段文字
输出
输入一段字符,以stop作为最后输入的字符串。
样例输入
My name is Amy
My name is Jane
stop
样例输出
11 name
12 name
提示
字符串长度不超过100。
#include<stdio.h>
#include<string.h>
int main()
{
char MaxString[100];
char sname[100][100];
int i,j;
for(i=0;i<100;i++)
{
gets(sname[i])
if(strcmp(sname[i],'stop')==0)
{
}
else
break;
}
我目前写到这不知道然后怎么办。
#include <stdio.h>
#include <string.h>
#define MAX 32
int find_longest(char *buff)
{
int total_len = 0, str_len = 0, longest_len = -1;
char longest[128] = {0};
char *p = buff;
while(1)
{
if (' ' == *p || '\0' == *p)
{
if (str_len > longest_len)
{
strncpy(longest, p-str_len, str_len);
longest_len = str_len;
}
total_len += str_len;
str_len = 0;
if ('\0' == *p)
{
break;
}
}
else
{
str_len++;
}
p++;
}
strcpy(buff, longest);
return total_len;
}
int main(int argc, char *argv[])
{
int i = 0, cnt = 0, total_len = 0;
char buff[MAX][128] = {{0}};
for (i = 0; i < MAX; i++)
{
if (NULL == fgets(buff[i], 128, stdin))
{
printf("错误\n");
return -1;
}
else
{
buff[i][strlen(buff[i])-1] = '\0';
if (0 == strcmp("stop", buff[i]))
{
cnt = i;
break;
}
}
}
for (i = 0; i < cnt; i++)
{
total_len = find_longest(buff[i]);
printf("%d %s\n", total_len, buff[i]);
}
return 0;
}追问
#include <string.h>
#define MAX 32
int find_longest(char *buff)
{
int total_len = 0, str_len = 0, longest_len = -1;
char longest[128] = {0};
char *p = buff;
while(1)
{
if (' ' == *p || '\0' == *p)
{
if (str_len > longest_len)
{
strncpy(longest, p-str_len, str_len);
longest_len = str_len;
}
total_len += str_len;
str_len = 0;
if ('\0' == *p)
{
break;
}
}
else
{
str_len++;
}
p++;
}
strcpy(buff, longest);
return total_len;
}
int main(int argc, char *argv[])
{
int i = 0, cnt = 0, total_len = 0;
char buff[MAX][128] = {{0}};
for (i = 0; i < MAX; i++)
{
if (NULL == fgets(buff[i], 128, stdin))
{
printf("错误\n");
return -1;
}
else
{
buff[i][strlen(buff[i])-1] = '\0';
if (0 == strcmp("stop", buff[i]))
{
cnt = i;
break;
}
}
}
for (i = 0; i < cnt; i++)
{
total_len = find_longest(buff[i]);
printf("%d %s\n", total_len, buff[i]);
}
return 0;
}追问
大佬,在我云端的编译器上他是直接输出 错误
devc++是对的,vs2017就报错了
是有什么问题吗0.0
没什么问题 strncpy_s不是标准库里的东西,是微软搞出来的一个第三方库,所以你用微软的vs2017就报错了。
你也可以用strncpy_s代替strncpy,不过在其他编译器下可能也编不过了,你可以网上搜一下报信息看下解决方法。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2020-04-22
这个题是,一到测试题,条件太多了,答案比较笼统,但是对了
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[100];
int i,j,k=0,len,max=0,chars=0;
while(1)
{
gets(str);
if(strstr(str,"stop")!=0)
break;
k=0;max=0;chars=0;j=0;
len=strlen(str);
for(i=0,j=0;i<=len;i++)
{
if(str[i]==' '||str[i]=='\0')
{
j++;
if(max<chars)
{
max=chars;
k=i-chars;
}
chars=0;
}
else
chars++;
}
printf("%d ",len-j+1);
for(i=k;i<k+max;i++)
printf("%c",str[i]);
printf("\n");
}
return 0;
}
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[100];
int i,j,k=0,len,max=0,chars=0;
while(1)
{
gets(str);
if(strstr(str,"stop")!=0)
break;
k=0;max=0;chars=0;j=0;
len=strlen(str);
for(i=0,j=0;i<=len;i++)
{
if(str[i]==' '||str[i]=='\0')
{
j++;
if(max<chars)
{
max=chars;
k=i-chars;
}
chars=0;
}
else
chars++;
}
printf("%d ",len-j+1);
for(i=k;i<k+max;i++)
printf("%c",str[i]);
printf("\n");
}
return 0;
}