user-0 提问: c语言  输入一串字符将最长的单词输出，用函数写

回复:
user: user-1
content: [quote=引用 1 楼 qq423399099 的回复:] 参考：  #include<stdio.h> #include<string.h> int main() {  	int tonji(char s[]); 	char str[100]; 	printf("请输入一串字符"); 	gets(str); 	tonji(str); 	return 0; }  int tonji(char s[]) { 	int i,flag=1,point,place=0,length=0,len=0; 	strcat(s, " "); 	for(i=0;s[i]!='\0';i++) 	{ 		if(s[i]!=' ') 		{  			if(flag) 			{ 				point=i;flag=0;   			} 			else 				len++;        		} 		else 		{ 			flag=1; 			if(len>length)         			{ 				length=len; 				place=point;      				len=0;     			} 		} 	} 	for(i=place;s[i]!=' ';i++) 		printf("%c",s[i]); 	return 0; }  初学者前来报到！版主你这个我在  vs 2013 pro  版运行了一下，gets（），strcat( )现在都不用了， 改用gets_s() 和strcat_s(）替代了。还有测试得不到想要的结果，不是每次都能输出最长单词，且无法同时 输出相同的最长单词，这个问题我想了一上午，看了很多帖子，终于解决。想跟大家分享下我的喜悦，请多指教 [code=c] #include<stdio.h> #include<memory.h> void main() { 	char str[40] = { 0 }; 	int t_number[40] = { 0 }, longest[40] = { 0 };    //   t_number表示最长单词的末字母序号， 									                //     longest表示最长字母的长度 	gets_s(str, 40); 	int i, t = 0, l = 0, k = 1;                       //t 末字母序号，l 最长长度，k最长相同单词个数 	for (i = 0; str[i] != '\0'; i++) 	{ 		if (str[i] != ' ')  //   ' '   (空格） 		{ 			if (str[i - 1] == ' '&&i - 1 != 0) l = 0 ;   //单词首字母，将之前的长度置0  			l++; 			if (str[i + 1] == ' ' || str[i + 1] == '\0')//在进入空格或结束字符之前进行判断，可以避免最后一个 			                                           //字符不是空格就漏掉最后那个单词 			{ 				t = i; 				if (l > longest[0]) 				{ 					memset(longest, 0, sizeof(longest)); 					memset(t_number, 0, sizeof(t_number));  //数组清零，当出现唯一的最长的单词时将之前保存的数据作废 					longest[0] = l; 					t_number[0] = t;                        //将唯一的最长单词存放在第一位，后来的相同长度的单词 			                                               //（长度和末字母序号）依次往后存放 					k = 1;  				} 				else if (l == longest[0])                    //可能会有相同长度的不同单词都是最长的都要输出 				{ 					longest[k] = l; 					t_number[k] = t; 					k++; 				} 			} 		} 	} 	for (int j = 0; j <k; j++)     //k表示最长单词的个数 	{ 		for (i = t_number[j] + 1 - longest[j]; i <= t_number[j]; i++)  //知道最长单词的的长度和末字母序号， 			                                                          //那其首字母序号可求 			printf("%c", str[i]);                      //用循环挨个输出指定位置的字符，组合起来就是最长的单词 		printf("\n"); 	} }

user: user-2
content: 版主果然速度

user: user-3
content: 参考：  #include<stdio.h> #include<string.h> int main() {  	int tonji(char s[]); 	char str[100]; 	printf("请输入一串字符"); 	gets(str); 	tonji(str); 	return 0; }  int tonji(char s[]) { 	int i,flag=1,point,place=0,length=0,len=0; 	strcat(s, " "); 	for(i=0;s[i]!='\0';i++) 	{ 		if(s[i]!=' ') 		{  			if(flag) 			{ 				point=i;flag=0;   			} 			else 				len++;        		} 		else 		{ 			flag=1; 			if(len>length)         			{ 				length=len; 				place=point;      				len=0;     			} 		} 	} 	for(i=place;s[i]!=' ';i++) 		printf("%c",s[i]); 	return 0; }

user: user-0
content: 引用 9 楼 qq423399099 的回复:[quote=引用 8 楼 xinye1230 的回复:] 哦、、 回帖最好引用一下。。。这样别人会有提示，不然并不一定看的到 问题解决了的话记得结贴[/quote]  哦  好吧，我知道了

user: user-3
content: 引用 8 楼 xinye1230 的回复:哦、、 回帖最好引用一下。。。这样别人会有提示，不然并不一定看的到 问题解决了的话记得结贴

user: user-0
content: 哦、、

user: user-3
content: 引用 6 楼 xinye1230 的回复:版主，那为什么是双引号，不是单引号啊？ because strcat需要两个参数是char *类型的，不是char

user: user-0
content: 版主，那为什么是双引号，不是单引号啊？

user: user-3
content: 引用 4 楼 xinye1230 的回复:stract(s," ")； 是什么意思啊？ 往你输入的字符串后面拼接上一个空格，否则的话最后一个单词不会进入else分支，就不会参加比较了

user: user-0
content: stract(s," ")； 是什么意思啊？

user: user-4
content: zifu 函数需要的参数是char，但你提供的是字符数组