我在C中编写了一个程序来反转字符串中每个单词的顺序。但我没有得到所需的输出。我得到一些奇怪的输出,打印出最后一个单词,然后是随机位置的许多特殊字符。请帮帮我。
#include<stdio.h>
#include<string.h>
void main()
{
int i,n,m;
char a[100];
printf("Enter your sentence");
gets(a);
n=strlen(a);
m=n-1;
for(i=m;i>=0;i--)
{
if(a[i]==' '||a[i]=='\0')
{
printf(" ");
for(;a[i]!=' '||a[i]!='\0';i++)
{
printf("%c",a[i]);
}
}
}
}
输出应该是&#34; stackoverflow就是这个&#34;如果我输入&#34;这是stackoverflow&#34;。
答案 0 :(得分:0)
for(;a[i]!=' '||a[i]!='\0';i++)
这应该改为
for(;a[i]!=' '&& a[i]!='\0';i++)
尝试以下代码
`
#include <stdio.h>
#include <string.h>
void main()
{
int i,n,m,j;
char a[100];
printf("Enter your sentence: ");
gets(a);
n=strlen(a);
m=n-1;
for(i=m;i>=0;i--)
{
if(a[i]== ' '){
for(j=i+1;(a[j]!=' ') && (a[j]!='\0');j++)
printf("%c",a[j]);
printf(" ");
}
else if(i==0){
for(j=i;(a[j]!=' ') && (a[j]!='\0');j++)
printf("%c",a[j]);
}
}
}
`
答案 1 :(得分:0)
您的代码似乎特别难以理解,我认为您应该做一些像这样的事情:
#include <stdio.h>
#include <string.h>
#define MAGIC_NUMBER 100
int is_separator(char c)
{
return c == ' ' || c == '\t' || c == '\n';
}
int main()
{
char input[MAGIC_NUMBER];
char output[MAGIC_NUMBER];
printf("Enter your sentence\n");
if (fgets(input, MAGIC_NUMBER, stdin) == NULL)
{
printf("No input!\n");
return 1;
}
// Length of input line
int n = strlen(input);
// let set i be the position of previous found word
int i = n;
// let first_word be 1 as long as output is empty
int first_word = 1;
// Let's initialize output as a empty string
strcpy(output, "");
while (i > 0)
{
// Searching last character of next word
int j = i;
while (j > 0 && is_separator(input[j - 1]))
{
j--;
}
// Searching first character of next word
int k = j;
while (k > 0 && !is_separator(input[k - 1]))
{
k--;
}
if (k < j)
{
// Adding a new word
if (first_word)
{
first_word = 0;
}
else
{
// If it is not first found word, insert a space
strcat(output, " ");
}
strncat(output, input + k, j - k);
}
i = k;
}
printf("%s\n", output);
return 0;
}