Возможно, это относится к сайту проверки кода?
Ваш подход мне кажется очень эффективным (за исключением того, что я бы назвал strlen (слова) один раз и сохранил результат в регистре).
Две возможные ошибки выглядят так:
wordend = strlen(words);
должно быть
wordend = strlen(words)-1;
и
for(j = wordstart ; j <= (wordend - wordstart) / 2 ; ++j) {
должно быть
for(j = wordstart ; j <= (wordend + wordstart) / 2 ; ++j) {
Окончательный код выглядит следующим образом (с некоторыми дополнительными {}):
#include <stdio.h>
int main(int argc,char *argv[])
{
int i,j;
char words[]= "this is a test";
int L=strlen(words);
// Reverse each word
for(i = 0; i < L; ++i) {
int wordstart = -1;
int wordend = -1;
if(words[i] != ' ')
{
wordstart = i;
for(j = wordstart; j < L; ++j) {
if(words[j] == ' ') {
wordend = j - 1;
break;
}
}
if(wordend == -1)
wordend = L-1;
for(j = wordstart ; j <= (wordend + wordstart) / 2 ; ++j) {
char temp = words[j];
words[j] = words[wordend - (j - wordstart)];
words[wordend - (j - wordstart)] = temp;
}
i = wordend;
}
}
printf("reversed string is %s:",words);
return 0;
}