Обратни думи в низ - в

По някаква причина, не мога да направя това да работи! Може ли някой да ми каже къде съм се объркал? Това трябва да обърне думите в даден низ (т.е. от "това е тест" до "тест а е това")

    #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("%dn", &nTestcase);
for (i = 0; i < nTestcase; i++)
{
fgets(inputstr, 100, stdin);
reversedStr = reverse(inputstr);
printf("%sn", reversedStr);
free(reversedStr);
memset(inputstr, 0, 100);
}
return 0;
}

Отговори:

1 за отговор № 1
words[currentWord] = words[currentWord] + input[i];

Не можете да добавяте символи един към друг, като очакване на струнен конкатенация. Предполагам, че очаквате words да бъде набор от думи (т.е. низове), но неговият тип не е, words е просто масив от знаци.

Подобно на @Tom каза, вие правите това отново в последната линия:

ret = ret + words[i];

0 за отговор № 2

Джоузеф, за разлика от другите езици за програмиране (c # или PHP), функциите за обработка на низовете на C са доста основни.

Не можете директно да добавяте струни, но има множество функции на библиотеката, които можете да използвате, за да изпълните същата задача.

Разгледайте,

  • strtok - Използвайте го, за да разделите низа на думи. справка за справки

  • strncat - Използва се за свързване на низове

струните в C са само байтови масиви, прекратени с нулевия знак (байт със стойност 0).