我正在编写代码以从头到尾重新排列字符串中的单词。我首先设法将字符从后到前排列,但是在第二次交换字符串中的第二个单词之前,似乎无法将字符串重置为null。

例如,使用输入“这里到底发生了什么”

输出结果是,“这里正在进行中,是什么鬼话Whatg”

因此,前一个单词的最后一个字母保留在“ tempWord”变量中。我怎样才能解决这个问题?

void revString(char statement[]);

int main (void){

int index;
char tempWord[LENGTH];
char statement[LENGTH] = "What the hell is going on here";
const char s[2] = " ";
char *word;
int wordCounter = 0;


revString(statement);

printf("%s\n", statement);              //Temp printing


(很明显,我要询问的代码在此行下方)

//////////////////////////////////////////////////////////////////////////////////////
index = 0;
word = strtok(statement, s);

while (word != NULL){
    wordCounter++;

    for (index = 0; index <= strlen(word); index++){
        tempWord[index] = '\0';
    }

    strcpy(tempWord, word);

    revString(tempWord);

    printf("%s ", tempWord);

    word = strtok(NULL, s);

}
printf("\n");
printf("%d words", wordCounter);

}


让我知道你的想法!

void revString(char original[]){

int index;
char temp[LENGTH];
int j = 1;

for (index = 0; index < strlen(original); index++, j++){
    temp[(strlen(original) - j)] = original[index];
}

strcpy(original, temp);
original[strlen(original)] = '\0';

}

最佳答案

问题是temp没有以'\ 0'终止。

我修改了revString并进行了一些调整(仅称为strlen一次)...



void revString(char original[]){

int index;
char temp[LENGTH];
int j = 1;
int len = strlen(original);

temp[len] = '\0';
for (index = 0; index < len; index++, j++){
        temp[len - j] = original[index];
}

strcpy(original, temp);
original[len] = '\0';


}



有趣的是,您的原始代码不会给我带来LENGTH值(从30到100)的问题。对于200多个字节的值,它给了我奇怪的字符(可能是垃圾),这使我不得不将字符串“ temp”中的最后一个字符设置为NULL 。

10-05 21:35