我正在编写一个代码,用于从后到前重新排列字符串中的单词。我首先设法将字符从后向前排列,但是在第二次交换字符串中的第二个字之前似乎无法将字符串重置为null,依此类推。
例如,通过输入,“这里到底发生了什么”
输出结果证明是,“这里正在发生的事情是什么”
所以前一个单词的最后一个字母与“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';
}
答案 0 :(得分:0)
根据单词的长度设置tempword的终止空字符 即
while (word != NULL){
wordCounter++;
strcpy(tempWord, word);
revString(tempWord);
tempWord[strlen(word)] = '\0';
printf("%s ", tempWord);
word = strtok(NULL, s);
}
printf("\n");
printf("%d words", wordCounter);
}
答案 1 :(得分:0)
问题是临时不会以&#39; \ 0&#39;。
终止我修改了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个字节的值,它给了我奇怪的字符(可能是垃圾)让我设置字符串中的最后一个字符&#34;温度&#34;为NULL。