高人,救命啊,我快疯了

baolima 2004-08-06 08:01:25
我刚学C,准备过计算机等级考试,发现C好难啊,有个问题不知道该怎么做,请教各位。
题目是:
如果一段字符串,如果里面含有字母o,则字母o前后内容倒置,没有o则原样输出
比如输入 wo ai china,则结果应该是: ai china,ow
没有的话,就原样输出~
多谢了
...全文
220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjf7888 2004-08-07
  • 打赏
  • 举报
回复
修改后!

int lof(char *str, int size)
{
char ts[MAX];
char *pt = ts;

for (int i = size - 1; i != 0 && str[i] != 'o'; i--);

if (str[i] == 'o')
str[i] = '\0';
else
return 0;
strcpy(ts, str);
strcpy(str, &str[i+1]);
str[i] = 'o';
strcpy(&str[i+1], ts);
return 1;
}
--------------------------------------------------------

我想应该在str[i]='o'前面加一句:i = size-1-i;
palm99 2004-08-07
  • 打赏
  • 举报
回复
查找,交换,还难吗?
gccr 2004-08-07
  • 打赏
  • 举报
回复
最后一个O就从后往前找不就行了?
ppdog 2004-08-07
  • 打赏
  • 举报
回复
楼上的算法还要考虑多个O得情况,这时候要最后一个o
  • 打赏
  • 举报
回复
应该不难:
思路就是
第一步:判断是否找到字母O。
第二步:如果没有,则原样输出。
如果有,则整个字符串以字符O为中心分成左右两部分,
先输出右半部分再输出左半部分。
universe01 2004-08-06
  • 打赏
  • 举报
回复
修改后!

int lof(char *str, int size)
{
char ts[MAX];
char *pt = ts;

for (int i = size - 1; i != 0 && str[i] != 'o'; i--);

if (str[i] == 'o')
str[i] = '\0';
else
return 0;
strcpy(ts, str);
strcpy(str, &str[i+1]);
str[i] = 'o';
strcpy(&str[i+1], ts);
return 1;
}

//我没有调试过!你自己实验一下!
universe01 2004-08-06
  • 打赏
  • 举报
回复
void lof(char *str, int size)
{
char ts[MAX];
char *pt = ts;

for (int i = size - 1; i != 0 && str[i] != 'o'; i--);

if (str[i] == 'o')
str[i] = '\0';
strcpy(ts, str);
strcpy(str, &str[i+1]);
str[i] = 'o';
strcpy(&str[i+1], ts);
}

//我没有调试过!你自己实验一下!
Dong 2004-08-06
  • 打赏
  • 举报
回复
呵呵。上面的最后的pos=emp要去掉。

//。。。。。。。。。。。。。。。。
没有看到你后面的一句话,我考虑的是最前面的。

你要获得最后个要这样的
if(pos)
{
char* emp=pos;
while((emp=strchr(pos+1,'o'))!=NULL)
{
pos=emp;
}
}
这一句插入到char *pos = strchr(t,'o');的面
Dong 2004-08-06
  • 打赏
  • 举报
回复
没有看到你后面的一句话,我考虑的是最前面的。

你要获得最后个要这样的
if(pos)
{
char* emp=pos;
while((emp=strchr(pos+1,'o'))!=NULL)
{
pos=emp;
}
pos=emp;

}
这一句插入到char *pos = strchr(t,'o');的面
Dong 2004-08-06
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fout(char* ch)
{
int len=strlen(ch);
char t[100];
strcpy(t,ch);
t[len]='\0';
char *pos = strchr(t,'o');
if(!pos)
printf("%s",ch);
else
{
char *c=t + len - 1;
while(c!=t)
{
if(*c==' ')
{
printf("%s\n",c+1);
*c='\0';
c--;
}
else
{
if(c==pos)
{
printf("%s\n",t);
break;
}
else
{
c--;
}
}
}
}
}


void main(void)
{
char* arr="wo ai china";
char* a="sdfdf werw wo dfasdfa dfa";
fout(arr);
printf("the next one...\n");
fout(a);
}

楼主。。。。我很久没有获得专家分了...........
baolima 2004-08-06
  • 打赏
  • 举报
回复
不好意思,说错了,如果有多个o的话,制考虑最后面的
baolima 2004-08-06
  • 打赏
  • 举报
回复
里面只会有一个o或者没有o
antijpn 2004-08-06
  • 打赏
  • 举报
回复
这个题目很奇怪嘛!如果有两个o怎么办?3个呢?

69,336

社区成员

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

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