各位高手拜托帮帮忙????

windkiller 2003-05-21 08:18:39
我想请问,如果我输入一句话,例如 the hotel is full,然后我想把这句话的每个单词分成两个字母为一对,如果单词是奇数个字母的话,把多出来的那个单词,再加一个x把它凑成一对,就变成了
th-ex-ho-te-lx-is-fu-ll,怎么样才可以实现,希望大家可以帮我看看,给个例子,谢谢了!!!
...全文
57 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
battlet 2003-05-23
  • 打赏
  • 举报
回复
if (str[i] != ' ') -->
if ((str[i] != ' ') && (str[i] != '\t') && (str[i] != '\n')),
比较好一点好像,;).
希望大家能指出程序中存在的问题.谢,
battlet 2003-05-23
  • 打赏
  • 举报
回复
char str[] = "the hotel is full";
char* buffer = new char[strlen(str)*2];
char* pd = buffer;

int conv(char *psz_scr, char *psz_dst)
{
int j = 1;
int i_len = strlen(str);
for(int i=0; i<i_len; i++,j++,pd++)
{
if ((j%2) && j>1) //add '-' each 2 char.
{
*pd = '-';
pd++;
}

if (str[i] != ' ')
{
*pd = str[i];
}
else
{
if (j%2)
pd--; //no need add any
else //need add x
{
*pd = 'x';
pd++;
*pd = '-';
}

j = 0;
}
}

if (!(j%2))
*pd++ = 'x';

*pd = '\0';

return 0;
}

不知道这样是不是好点?
windkiller 2003-05-23
  • 打赏
  • 举报
回复
请问各位,如果不用指针,用STRING做的话,应该如何解决呢???
forever1314 2003-05-23
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstring>
using namespace std;

int BunManage( char* preBun, char* resBun )
{
int i = 0; //计数器
char chX[1];
chX[0] = 'x';
char ch_[1];
ch_[0] = '-';

if( !preBun )
return 0;

while( (*preBun)!='\0' )
{
if( *preBun == ' ' )
{
if( i==1 )
{
strncat( resBun, chX, 1 );
i++;
}
else
{
if( i==2 )
{
strncat( resBun, ch_, 1 );
i = 0;
preBun++;
continue;
}
else
{
preBun++;
continue;
}

}
}
else
{
if( i!=2 )
{
strncat( resBun, preBun, 1 );
i++;
preBun++;
continue;
}
else
{
strncat( resBun, ch_, 1 );
i = 0;
continue;
}
}
}

return 0;
}
Zark 2003-05-23
  • 打赏
  • 举报
回复
void SplitWord(char* szSrc,char* szTarget)
{
if(!szSrc || !szTarget || !*szSrc)
return;

while(1)
{
*szTarget++=*szSrc++;
if(!(*szSrc))
{
*szTarget++='x';
*szTarget='\0';
return;
}
*szTarget++=*szSrc++;
if(!(*szSrc))
{
*szTarget='\0';
return;
}
*szTarget++='-';
}
}

void main()
{
char szStr[]="the hotel is full";
char* szTarget=new char[3*strlen(szStr)+1];
char* pToken=strtok(szStr," \n");
char* ptr=szTarget;
while(pToken)
{
SplitWord(pToken,ptr);
ptr+=strlen(ptr);
*ptr++='-';
pToken=strtok(NULL," \n");
}
*(--ptr)='\0';
printf("%s",szTarget);
delete []szTarget;
}

(以上程序未经测试,使用者后果自负,作者保留所有版权)
Goldbach 2003-05-22
  • 打赏
  • 举报
回复
同志们,做题的漫漫来
不要性急
自己静下来好好想想
windkiller 2003-05-22
  • 打赏
  • 举报
回复
寻求更好的方法,谢谢大家!!!
windkiller 2003-05-22
  • 打赏
  • 举报
回复
flab_Iwq(),请问你有更好的方法吗???
flab_lwq 2003-05-22
  • 打赏
  • 举报
回复
应该有更好的方法?up
WindWay 2003-05-22
  • 打赏
  • 举报
回复
简单,清楚,有什么看不懂的?

首先让buffer指向字符串两倍的空间,再定义pd
if str[i]=字母
付给pd所指向空间,pd+1
if str[i+1]=字母
付给pd所指向空间,pd+1
else
把x付给pd所指向空间
else
就把'-'付给pd所指向空间
zxy1492 2003-05-21
  • 打赏
  • 举报
回复
这是不是楼主的作业呀?
如果是作业,就得自己做呀
spark_li 2003-05-21
  • 打赏
  • 举报
回复
逻辑很清楚呀,不错不错。
windkiller 2003-05-21
  • 打赏
  • 举报
回复
楼上的朋友,可否帮我解释一下,不太理解。谢!!
ghtsao 2003-05-21
  • 打赏
  • 举报
回复
这TMD太容易了,不过不知道数字和其它非字母字符你想怎么处理,我现只把它当成 - 号了。

char[] str = "the hotel is full";
char* buffer = new char[strlen(str)*2];
char* pd = buffer;

for(int i = 0;i<strlen(str);i++)
{
if((str[i]>='a' && str[i] <='z') || (str[i]>='A' && str[i]<='Z'))
{
*pd = str[i];pd++;
if((str[i+1]>='a' && str[i+1] <='z') || (str[i+1]>='A' && str[i+1]<='Z'))
{
*pd=str[i+1];pd++;i++;
}
else
{
*pd = 'x';pd++;
}
}
else
{
if((str[i+1]>='a' && str[i+1] <='z') || (str[i+1]>='A' && str[i+1]<='Z'))
{
*pd='-';pd++;i++;
}
else
{
i++;
}
}
}

给点分哦,我正在升级。

69,371

社区成员

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

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