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