我有这个程序
#include <stdio.h>
#include <stdlib.h>
int main()
{
char text[30];
int i,j,n;
puts("Enter the Text:");
gets(text);
n=strlen(text);
for(i=n;i>=0;i--)
{
if(text[i-1]==' '||text[i-1]==NULL )
{
for(j=i;text[j]!=' ';j++)
{
printf("%c",text[j]);
}
}
printf(" ");
}
getche();
}
假如我输入的是“我很开心”,那么我的输出是“我是快乐”
我不确定我在这个程序中出错了什么,我没有得到所有的话,我得到的结果是“快乐[=我是”。请程序员帮助我。
提前致谢。
我找到了答案,谢谢你的帮助, 以下是我的代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
char text[100];
int i,j;
puts("Enter the Text:");
gets(text);
strrev(text);
for(i=0;text[i]!='\0';i++)
{
if(text[i+1]==' ' || text[i+1]==NULL)
{
for(j=i;j>=0 && text[j]!=' ';j--)
printf("%c",text[j]);
}
printf(" ");
}
getche();
}
答案 0 :(得分:4)
基本上是md5的解决方案,使用递归实现:
#include <stdio.h>
#include <string.h>
void print_upto_space(const char *s)
{
do {
putc(*s, stdout);
} while (*s++ != ' ');
}
void reverse_print(const char *s)
{
const char *p = strchr(s, ' ');
if (p == NULL) {
printf("%s ", s);
} else {
reverse_print(p + 1);
print_upto_space(s);
}
}
答案 1 :(得分:2)
您可以使用以下算法:
A
)。A
。虽然在空间中这是O(n)
,但这可能是更简单的算法(因为你的字符串长度只有30个字符,没关系)。
答案 2 :(得分:1)
你可以尝试这个来反转字符串: -
void reverseWords( char * str )
{
int i = 0, j = 0;
reverseString( str, strlen(str) );
while( 1 ) // Loop forever
{
if( *(str+j) == ' ' || *(str+j) == '\0')
{
reverseString( str+i, j-i );
i = j+1;
}
if( *(str+j) == '\0')
{
break;
}
j++;
}
}
void reverseString(char* str, int len)
{
int i, j;
char temp;
i=j=temp=0;
j=len-1;
for (i=0; i<j; i++, j--)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
答案 3 :(得分:1)
此解决方案不需要任何额外的内存缓冲区。
首先使用两个指针反转整个字符串。
然后使用另外两个指针遍历字符串并反转每个单词。