一个计算第一个单词长度的函数

kog2333 2016-05-30 12:59:08
C语言
首先是这样的,一个包含10个字符串的数组 有words[10][100];
然后要求首先按照字符串的长度来输出,于是我写了个函数
void putLenght(char (*word)[MLen] , int n)
{
char mid[n][MLen];
for(int i = 0 ; i < n ; ++i)
strcpy(*(mid+i),*(word+i));
for(int i = 0 ; i < n ; ++i) //sort by lenght
{
for(int j = i ; j < n ; ++j)
{
char midChar[MLen];
if(strlen(*(mid+i)) > strlen(*(mid+j)))
{
strcpy(midChar,*(mid+i));
strcpy(*(mid+i),*(mid+j));
strcpy(*(mid+j),midChar);
}
}
}
for(int i = 0 ; i < n ; ++i)
fputs(*(mid+i),stdout);
}

这个函数运行完全没有问题,根据字符串长度输出,然后第二要求是按照字符串的地一个单词长度输出(地一个单词的定义是字符串遇到地一个空格前的字符数)
于是我想写个统计第一个单词长度的自定义函数来代替上面的strlen()不久OK了?
于是我直接把上面的代码复制过来,只把strlen()换成了自定义函数
~~~~
void putFirstWord(char (*word)[MLen] , int n)
{
char mid[n][MLen];
for(int i = 0 ; i < n ; ++i)
{
printf("%d\n",LenForFirstWord(*(word+i),MLen));
printf("%d\n",LenForFirstWord(*(mid+i),MLen));
strcpy(*(mid+i),*(word+i));
}
for(int i = 0 ; i < n ; ++i) //sort by lenght
{
for(int j = i ; j < n ; ++j)
{
char midChar[MLen];
if(LenForFirstWord(*(mid+i),MLen) > LenForFirstWord(*(mid+j),MLen)) //<--唯一的区别
{
strcpy(midChar,*(mid+i));
strcpy(*(mid+i),*(mid+j));
strcpy(*(mid+j),midChar);
}
}
}
for(int i = 0 ; i < n ; ++i)
fputs(*(mid+i),stdout);
}
int LenForFirstWord(char* word , int n)
{
int Lenght = 0;
for(int i = 0 ; i < n ; ++i)
{
if((*(word+i)) == ' ')
{
Lenght = i;
break;
}
}
return Lenght;
}

然后我发现我写的计算第一个单词长度(即遇到第一个空格的字符的数量)只能计算3个,也就是说在函数putFirstWord()函数中,自定义函数只能正确计算前3个字符串的首个单词长度,从第4个单词开始计算的结果完全不对,我想问下这个是属于什么情况
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-05-30
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
ghx287524027 2016-05-30
  • 打赏
  • 举报
回复
建议自己进行调试,逐步查看变量和内存的变化,发现问题比直接解决问题更有意义~

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧