reverse words in a string

may_Xia 2017-04-12 09:07:16
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];
gets(a);
int l=strlen(a);
char b[l];
int i,m,c=-1,d=0;
for(i=0;i<100;i++)
{
if(a[i]=='\0') break;
c++;
if(a[i]==' ')
{
for(m=0;m<c;m++)
{
b[d+m]=a[i-1-m];
}
d=d+c;
b[d++]=' ';
c=-1;
}
}
printf("%s",b);
return 0;
}

输入:hello helloworld
输出:olleh
后半截为啥不能输出呢?
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
litchgu 2017-04-12
  • 打赏
  • 举报
回复
可以啊,你输入的时候这样写,hello空格world空格
stherix 2017-04-12
  • 打赏
  • 举报
回复
if(a[i]=='\0') break; 这一句有问题 遇到字符串尾不应该直接跳出循环 而是应该检查结束前是否存在最后一个单词 并反转它 否则最后一个单次是无法输出的
may_Xia 2017-04-12
  • 打赏
  • 举报
回复
谢谢楼上,我已经改好了。只是自己的代码不会提交到leetcode上,第一次用。只有一个char* reverseWords(char* s)函数,该怎么改呢?
自信男孩 2017-04-12
  • 打赏
  • 举报
回复
通过运用这个回车符,可以将最后一个单词反转
自信男孩 2017-04-12
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

int main()
{
    char a[128];

    fgets(a, 128, stdin);
    int l = strlen(a);
    char b[l];
    int i,j,c=-1,d=0;

    for(i = 0; i < l; i++)
    {
        if(a[i] == '\0')
            break;
        c++;
        if(a[i] == ' ' || a[i] == '\n') {
            for(j = 0; j < c; j++) {
                b[d + j] = a[i-1-j];
            }
            d = d + c;
            b[d++] = ' ';
            c = -1;
        }
    }
    printf("%s",b);

    return 0;
}
之所以只对第一个单词反转,因为第二个单词后面没有空格,因为你的程序里只有遇到了空格才会反转;所以,在输入时注意在最后一个单词后面加空格; 考虑gets不安全,我用fgets代替,但fgets在最后会有一个回车符加入到缓存(当输入的数据少于字符数组长度时)
paschen 2017-04-12
  • 打赏
  • 举报
回复
你应该最后再判断是否为\0,这样改:

#include<stdio.h>
#include<string.h>
int main()
{
	char a[1000];
	gets(a);
	int l=strlen(a);
	char b[l];
	int i,m,c=-1,d=0;
	for(i=0;i<100;i++)
	{
		c++;
		if(a[i]==' ' || a[i]=='\0')
		{
			for(m=0;m<c;m++)
			{
				b[d+m]=a[i-1-m];
			}
			d=d+c;
			b[d++]=' ';
			c=-1;
			if(a[i]=='\0')
				break;
		}
	}
	printf("%s",b); 
	return 0;
} 

69,371

社区成员

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

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