По какой-то причине я не могу заставить это работать! Может ли кто-нибудь сказать мне, где я ошибся? Предполагается, что это поменять местами слова в строке поддавки (т.е. от «это тест» на «испытание на это»)Обратные слова в строках
#include <stdio.h>
#include <stdlib.h>
char *reverse(char const *input)
{
char *ret = (char *)malloc(sizeof(char) * strlen(input));
int length = 0;
int numWords = 1;
int i;
for(i=0; input[i]!=NULL; i++)
{
length++;
if(input[i]==' ')
numWords++;
}
char words[numWords];
int currentWord = numWords;
for(i=0; input[i]!=NULL; i++)
{
if (input[i]==' '){
currentWord--;
}else{
words[currentWord] = words[currentWord] + input[i];
}
}
for(i=0; i < numWords; i++)
{
ret = ret + words[i];
}
return ret;
}
int main(int argc, char **argv)
{
int nTestcase = 0;
int i = 0;
char inputstr[100];
char *reversedStr = NULL;
scanf("%d\n", &nTestcase);
for (i = 0; i < nTestcase; i++)
{
fgets(inputstr, 100, stdin);
reversedStr = reverse(inputstr);
printf("%s\n", reversedStr);
free(reversedStr);
memset(inputstr, 0, 100);
}
return 0;
}
У вас есть конкретный вопрос? Какая часть не работает? –
что вы подразумеваете под этой строкой в ваших кодовых словах [currentWord] = words [currentWord] + input [i]; ??? вы добавляете два символа и сохраняете их в другом! – 999k
Выглядит слишком сложно. Почему вас волнует количество слов? Просто начните с конца и отсканируйте назад в поисках пробелов; когда вы его найдете, напечатайте часть строки, начиная с символа после пробела и заканчивая перед следующим пространством. – Caleb