if和while的区别在哪里?

coolboy_123 2007-02-06 05:52:43
昨天去面试,小弟作了一道题,要求判断一个字符串是否是回文。类似"sim a mis"," cool ooc" 都是回文。我写了个函数是去掉字符串中的空格。

char *del_blank(char *str, char *str_new)
{
int i, k;
int n=strlen(str);
for(i=0, k=0; i<=n, k<=n; i++, k++)
if(str[i]==' ')
i++;
str_new[k]=str[i];
return(str_new);

}

面试官说我应该用while(str[i]==' '),而不是if(str[i]==' ')。 否则当碰到"sim a mis"这种有连续几个空格在一起的字符串就会处理不了。这个我理解不了,请各位指点。另外我刚学编程,如果这个函数中有什么其他问题,也请指出来。谢谢。
...全文
1124 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nagexiatiank 2008-10-30
  • 打赏
  • 举报
回复
呵呵,估计没什么大的区别吧
stringboy 2007-02-09
  • 打赏
  • 举报
回复
for 和if的区别 是FOR在满足的条件下可以循环 而IF不能循环只运行一次 把if放在循环里使用就可以了
Anchorite1981 2007-02-07
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

#define OK (1)
#define ERR (0)
#define MAX_STR_LEN (100)
#define ARGS_NUM (2)

int DelSpace(char *pucSrcStr, char *pucDstStr);

int main(int argc, char **argv)
{
int ulRet;
char aucSrcStr[MAX_STR_LEN] = { 0 };
char aucDstStr[MAX_STR_LEN] = { 0 };

if (ARGS_NUM != argc)
{
printf("\r\nPlease Input Like This : DelSpace \"main(int argc, char **argv)\"");
return ERR;
}

strcpy(aucSrcStr, argv[1]);

ulRet = DelSpace(aucSrcStr, aucDstStr);
if (OK != ulRet)
{
printf("There Is Something Wrong!");
}
else
{
printf("\r\nSrcStr : %s", argv[1]);
printf("\r\nDstStr : %s", aucDstStr);
}

return OK;
}

int DelSpace(char *pucSrcStr, char *pucDstStr)
{
int ulLoopi = 0;
int ulLoopj = 0;
int ulStrLen;

if ((0 == pucSrcStr) || (0 == pucDstStr))
{
return ERR;
}

ulStrLen = strlen(pucSrcStr);
if (MAX_STR_LEN <= ulStrLen)
{
return ERR;
}

while (ulLoopi < ulStrLen)
{
while((' ' == pucSrcStr[ulLoopi]) && (ulLoopi < ulStrLen))
{
ulLoopi++;
}

while ((' ' != pucSrcStr[ulLoopi]) && (ulLoopi < ulStrLen))
{
pucDstStr[ulLoopj] = pucSrcStr[ulLoopi];
ulLoopj++;
ulLoopi++;
}
}

pucDstStr[ulLoopj] = '\0';

return OK;
}

学习中!请指教,谢谢!
fosjos 2007-02-07
  • 打赏
  • 举报
回复
return(str_new);
并且保证'\0'复制到str_new里了

str2要分配内存
char str2[100];
或者char * str2 = new char[sizeof(str)];(最后加delete [] str2;)

不过像你这种情况cout<<del_blank(str, str);也可以
coolboy_123 2007-02-07
  • 打赏
  • 举报
回复
嗯。明白了。最后问一个问题,不要笑啊。怎么在main函数里面调用这个函数?比如,我要测试一下我这个函数是否成功,该怎么做?

#include <iostream>
#include <string>
using namespace std;

char del_blank(char *str,char *str_new)
{
int i, k;
int n=strlen(str);
for(i=0, k=0; i<n, k<n; i++, k++)
{
if(str[i]==' ')
i++;
str_new[k]=str[i];
}
return(*str_new);
}


void main() //这个main函数该怎么写?我确实不知道改如何为del_blank函数赋值。
{
int *str2;
char str[]="hello cool boy";
cout<<del_blank(str, str2); //失败

}

Mypiger 2007-02-07
  • 打赏
  • 举报
回复
char strTmp[64] = "sim a mis";
char strTmp1[64] = {0};
int iLen = strlen(strTmp), j = 0;
for( int i=0;i<iLen;i++ )
{
if(strTmp[i]!=' ')
{
strTmp1[j] = strTmp[i];
j++;
}
}
rollor_phoe 2007-02-06
  • 打赏
  • 举报
回复
总之都可以达到目的。
v风雪山神庙v 2007-02-06
  • 打赏
  • 举报
回复
面试官的意思是:
如"ABC VFGG"这个字符串
用while的话到第一个空格时i就可以直接到V
用if的话也可以到V,但i时由for来加的。
fosjos 2007-02-06
  • 打赏
  • 举报
回复
k肯定比i小,所以i<=n就可以了
面试官正确,楼主自己一个一个试过就知道了
char *del_blank(char *str, char *str_new)
{
int i, k;
for(i=0, k=0; str[i]!='\0'; i++)
if(str[i]!=' ')
str_new[k++]=str[i];
str_new[k]='\0';
return(str_new);
}
coolboy_123 2007-02-06
  • 打赏
  • 举报
回复
嗯。谢谢rollor_phoe(柔枫) 和lntafdm(if(水火相融){那该多好~~}) 的指教。这两个错误是今天的失误,昨天没这些问题。我想知道的就是,这里用for和if是没有区别的吗?还是说有什么细节上的区别?
lntafdm 2007-02-06
  • 打赏
  • 举报
回复
for(i=0, k=0; i<=n, k<=n; i++, k++)
===================================
i<n, k<n
rollor_phoe 2007-02-06
  • 打赏
  • 举报
回复
修改后程序如下:
char *del_blank(char *str, char *str_new)
{
int i, k;
int n=strlen(str);
for(i=0, k=0; i<=n, k<=n; i++, k++)
{
if(str[i]==' ')
i++;
str_new[k]=str[i];
}
return(str_new);
}
rollor_phoe 2007-02-06
  • 打赏
  • 举报
回复
这个程序用if也是可以的,因为你已经用for循环了,只是你的程序有点问题,for循环中应该加上大括号。
如下:
char *del_blank(char *str, char *str_new)
{
int i, k;
int n=strlen(str);
for(i=0, k=0; i<=n, k<=n; i++, k++)

if(str[i]==' ')
i++;
str_new[k]=str[i];
return(str_new);

}
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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