哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

时间:2022-04-22 15:54:19

#include <stdio.h>
#include <string.h>
int main()
{ void cd(char str_1[]); //声明函数
char str[100];

printf("请输入一串字符:\n");

gets(str);
cd(str); //调用函数
return 0;

}
void cd(char str_1[]) //定义函数
{ int i,m,length=0;

for(i=0;(size_t)i<strlen(str_1);i++)//size_t  don't know
if (str_1[i]>='a'&&str_1[i]<='z'||str_1[i]>='A'&&str_1[i]<='Z')
m=i; //判断第几个字符开始是字母

for( ;(size_t)i<strlen(str_1);i++)
if (str_1[i]<'a'&&str_1[i]>'z'||str_1[i]<'A'&&str_1[i]>'Z')
if ((i-m)>length)
length=i-m; //比较单词长度


if( ;m<i;m++) //输出最长单词
printf("%c",str_1[m]);

}


功能:输入一串字符,输出最长的单词
①调试 在最后一个IF 出错了,不知道怎么错了,
②还有strlen 返回无符号整型  
我定义 int i  i  不就是个无符号整型吗?
为什么下面比较时前面要加(size_t)
for(i=0;(size_t)i<strlen(str_1);i++)

谢谢~ 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

14 个解决方案

#1


if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
size_t是无符号整形,相当于unsigned int

#2


楼主逻辑有点问题啊,
#include <stdio.h>
#include <string.h>
int main()
{   void cd(char str_1[]);        //声明函数
    char str[100];
 
    printf("请输入一串字符:\n");
 
    gets(str);
    cd(str);                 //调用函数
    return 0;
 
}
void cd(char str_1[])         //定义函数
{   int i,m,length=0;
 
    for(i=0;(size_t)i<strlen(str_1);i++)//size_t  don't know
        if (str_1[i]>='a'&&str_1[i]<='z'||str_1[i]>='A'&&str_1[i]<='Z')
        {
            m=i;                    //判断第几个字符开始是字母
            break;    //这个地方应该遇到字母就跳出for循环
        }
 
    for( ;(size_t)i<strlen(str_1);i++)
        if (str_1[i]<'a'&&str_1[i]>'z'||str_1[i]<'A'&&str_1[i]>'Z')
            if ((i-m)>length)
                length=i-m;             //比较单词长度
             
 
        for( ;m<i;m++)           //输出最长单词
            printf("%c",str_1[m]);
        printf("\nend\n");
 
}

#3


嗯嗯  这样改后就无错误,
但貌似 算法有问题。。。 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

引用 1 楼 anhuizhuanjiao 的回复:
if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
size_t是无符号整形,相当于unsigned int

#4


引用 3 楼 king_small_smaller 的回复:
嗯嗯  这样改后就无错误,
但貌似 算法有问题。。。

引用 1 楼 anhuizhuanjiao 的回复:if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
size_t是无符号整形,相当于unsigned int
    ……


我没太看懂你的算法是什么意思 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

#5


int == (unsigned int || signed int)

#6


哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~
就是 要求  输入一串字符,然后输出字符里面长度最长的单词。。。
我是想 
先比较一串字符里面哪个单词最长
然后输出。。。


引用 4 楼 anhuizhuanjiao 的回复:
引用 3 楼 king_small_smaller 的回复:嗯嗯  这样改后就无错误,
但貌似 算法有问题。。。

引用 1 楼 anhuizhuanjiao 的回复:if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
siz……

#7


哈哈  你的头像好给力啊~
呃,,,调试后运行结果不对呀。。。
比如:~!@ i am a boy!
我写的程序是想 挨个判断
确定boy 最长 然后输出,
您在给看看  我哪里错了,谢谢 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

引用 2 楼 hqw19881118 的回复:
楼主逻辑有点问题啊,
C/C++ code?12345678910111213141516171819202122232425262728293031323334#include <stdio.h>#include <string.h>int main(){   void cd(char str_1[]);        //声明函数    char str[100];……

#8


引用 7 楼 king_small_smaller 的回复:
哈哈  你的头像好给力啊~
呃,,,调试后运行结果不对呀。。。
比如:~!@ i am a boy!
我写的程序是想 挨个判断
确定boy 最长 然后输出,
您在给看看  我哪里错了,谢谢

引用 2 楼 hqw19881118 的回复:楼主逻辑有点问题啊,
C/C++ code?12345678910111213141516171819202122232……


我给你写了个,自己看看

int main()
{  
void cd(char str_1[]);        //声明函数
char str[100];

printf("请输入一串字符:\n");

gets(str);
cd(str); //调用函数


return 0;

}
void cd(char str_1[])         //定义函数
{   
int   i,length=0;
char  str[100][100];
char  maxchar[100]={"0"};
int   max=0;
int   m=0,n=0;
for(i=0;(size_t)i<strlen(str_1);i++)//size_t  don't know
if (str_1[i]>='a'&&str_1[i]<='z'||str_1[i]>='A'&&str_1[i]<='Z')
{
str[m][n++]=str_1[i];     
}
else
{
if(n>max)
max=m;
str[m][n]='\0';
m++;
n=0;
}

printf("%s",str[max]);
printf("\nend\n");

}

#9


输入单词 如asds12saaadd  
streln()单词长度后 是字母的i++  然后定义一个max变量和i比较  i遇到非字母字符时候清0  max初始化无限小

#10


size_t是无符号类型,相当于unsigned int,而int可与unsigned int不相当啊

#11


有点深奥。。。
麻烦能帮我看下 我的算法哪里错了吗? 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~


引用 9 楼 zhuankeshumo 的回复:
输入单词 如asds12saaadd  
streln()单词长度后 是字母的i++  然后定义一个max变量和i比较  i遇到非字母字符时候清0  max初始化无限小

#12


语法错误可以根据编译器的提示改下  语言语法就那样  语法熟悉了记事本照样写程序
今天还得写3000字论文呢  偷偷来坛子看看的

#13


哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~希望楼主注重算法  推荐你一个博客 http://blog.csdn.net/v_JULY_v  字符串、数据结构部分讲解的非常好

#14



嗯嗯 谢谢~ 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

引用 13 楼 zhuankeshumo 的回复:
希望楼主注重算法  推荐你一个博客http://blog.csdn.net/v_JULY_v  字符串、数据结构部分讲解的非常好

#1


if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
size_t是无符号整形,相当于unsigned int

#2


楼主逻辑有点问题啊,
#include <stdio.h>
#include <string.h>
int main()
{   void cd(char str_1[]);        //声明函数
    char str[100];
 
    printf("请输入一串字符:\n");
 
    gets(str);
    cd(str);                 //调用函数
    return 0;
 
}
void cd(char str_1[])         //定义函数
{   int i,m,length=0;
 
    for(i=0;(size_t)i<strlen(str_1);i++)//size_t  don't know
        if (str_1[i]>='a'&&str_1[i]<='z'||str_1[i]>='A'&&str_1[i]<='Z')
        {
            m=i;                    //判断第几个字符开始是字母
            break;    //这个地方应该遇到字母就跳出for循环
        }
 
    for( ;(size_t)i<strlen(str_1);i++)
        if (str_1[i]<'a'&&str_1[i]>'z'||str_1[i]<'A'&&str_1[i]>'Z')
            if ((i-m)>length)
                length=i-m;             //比较单词长度
             
 
        for( ;m<i;m++)           //输出最长单词
            printf("%c",str_1[m]);
        printf("\nend\n");
 
}

#3


嗯嗯  这样改后就无错误,
但貌似 算法有问题。。。 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

引用 1 楼 anhuizhuanjiao 的回复:
if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
size_t是无符号整形,相当于unsigned int

#4


引用 3 楼 king_small_smaller 的回复:
嗯嗯  这样改后就无错误,
但貌似 算法有问题。。。

引用 1 楼 anhuizhuanjiao 的回复:if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
size_t是无符号整形,相当于unsigned int
    ……


我没太看懂你的算法是什么意思 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

#5


int == (unsigned int || signed int)

#6


哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~
就是 要求  输入一串字符,然后输出字符里面长度最长的单词。。。
我是想 
先比较一串字符里面哪个单词最长
然后输出。。。


引用 4 楼 anhuizhuanjiao 的回复:
引用 3 楼 king_small_smaller 的回复:嗯嗯  这样改后就无错误,
但貌似 算法有问题。。。

引用 1 楼 anhuizhuanjiao 的回复:if( ;m<i;m++)           //输出最长单词
     printf("%c",str_1[m]);
这里应该是
for( ;m<i;m++)吧

int是整形
siz……

#7


哈哈  你的头像好给力啊~
呃,,,调试后运行结果不对呀。。。
比如:~!@ i am a boy!
我写的程序是想 挨个判断
确定boy 最长 然后输出,
您在给看看  我哪里错了,谢谢 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

引用 2 楼 hqw19881118 的回复:
楼主逻辑有点问题啊,
C/C++ code?12345678910111213141516171819202122232425262728293031323334#include <stdio.h>#include <string.h>int main(){   void cd(char str_1[]);        //声明函数    char str[100];……

#8


引用 7 楼 king_small_smaller 的回复:
哈哈  你的头像好给力啊~
呃,,,调试后运行结果不对呀。。。
比如:~!@ i am a boy!
我写的程序是想 挨个判断
确定boy 最长 然后输出,
您在给看看  我哪里错了,谢谢

引用 2 楼 hqw19881118 的回复:楼主逻辑有点问题啊,
C/C++ code?12345678910111213141516171819202122232……


我给你写了个,自己看看

int main()
{  
void cd(char str_1[]);        //声明函数
char str[100];

printf("请输入一串字符:\n");

gets(str);
cd(str); //调用函数


return 0;

}
void cd(char str_1[])         //定义函数
{   
int   i,length=0;
char  str[100][100];
char  maxchar[100]={"0"};
int   max=0;
int   m=0,n=0;
for(i=0;(size_t)i<strlen(str_1);i++)//size_t  don't know
if (str_1[i]>='a'&&str_1[i]<='z'||str_1[i]>='A'&&str_1[i]<='Z')
{
str[m][n++]=str_1[i];     
}
else
{
if(n>max)
max=m;
str[m][n]='\0';
m++;
n=0;
}

printf("%s",str[max]);
printf("\nend\n");

}

#9


输入单词 如asds12saaadd  
streln()单词长度后 是字母的i++  然后定义一个max变量和i比较  i遇到非字母字符时候清0  max初始化无限小

#10


size_t是无符号类型,相当于unsigned int,而int可与unsigned int不相当啊

#11


有点深奥。。。
麻烦能帮我看下 我的算法哪里错了吗? 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~


引用 9 楼 zhuankeshumo 的回复:
输入单词 如asds12saaadd  
streln()单词长度后 是字母的i++  然后定义一个max变量和i比较  i遇到非字母字符时候清0  max初始化无限小

#12


语法错误可以根据编译器的提示改下  语言语法就那样  语法熟悉了记事本照样写程序
今天还得写3000字论文呢  偷偷来坛子看看的

#13


哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~希望楼主注重算法  推荐你一个博客 http://blog.csdn.net/v_JULY_v  字符串、数据结构部分讲解的非常好

#14



嗯嗯 谢谢~ 哪个高手帮小弟看下,定义函数哪里错了?还有 关于strlen的一个问题,谢谢~

引用 13 楼 zhuankeshumo 的回复:
希望楼主注重算法  推荐你一个博客http://blog.csdn.net/v_JULY_v  字符串、数据结构部分讲解的非常好