0

我试图理解这行特定的代码。

我无法理解为什么需要 3 个赋值语句。我认为这是最低限度的必要条件,我似乎无法用我的思想去遵循它。

如果有人能用英语带我了解每一行的作用,那就太好了。

谢谢。

void to_upper(char *word) {

  int index = 0;

  while (word[index] != '\0') {
    word[index] = toupper(word[index]);
    index++;
  }
}

int length(char *word) {

  int index=0;

  while (word[index] != '\0')
    index++;
  return index;
}

void reverse(char *word) {
  int index, len;
  char temp;
  len = length(word);
  for (index=0; index<len/2; index++) {
    temp = word[index];
    word[index] = word[len-1-index];
    word[len-1-index] = temp;
  }
}
4

2 回答 2

2
  for (index=0; index<len/2; index++) {
1    temp = word[index];
2    word[index] = word[len-1-index];
3    word[len-1-index] = temp;
  }

1:存储的值word[index](我们稍后会需要它)

2:将与数组中点等距的单词数组的值存入word[index]

3:将原始值存储word[index]到与数组中点等距的位置

eg: if index = 0, 第一个词与最后一个词交换,依此类推。

于 2013-02-19T02:31:30.323 回答
1

我假设你理解你的代码的lengthto_upper部分,因为它们基本上是 c++ 101 的东西。

//Well, just be the title, I would assume this function reverses a string, lets continue.
void reverse(char *word) {
  int index, len;  //declares 2 integer variables
  char temp;       //creates a temporary char variable
  len = length(word); //set the length variable to the length of the word
  for (index=0; index<len/2; index++) {
    //Loop through the function, starting at 
    //index 0, going half way through the length of the word
    temp = word[index]; //save the character at the index
    word[index] = word[len-1-index]; //set the character at the index in the array 
                                     //to the reciprocal character.
    word[len-1-index] = temp; //Now set the reciprocal character to the saved one.
  }
}

//This essentially moves the first letter to the end, the 2nd letter to the 2nd 
//to end, etc.

因此,如果你有“race”这个词,它会将“r”与“e”交换,然后将“a”与“c”交换,以获得最终的“ecar”字符串,或者倒退。

要了解他们为什么需要 3 个作业:如果您word[index] = word[len-1-index]在两个地方都设置 then,则存在相同的字符。这就像将“race”设置为“racr”。如果您随后设置word[len-1-index] = word[index],您只需将相同的字符放回第一部分,因此您将从“racr”变为“racr”。您需要一个临时变量来保存原始值,以便您可以替换字符串前面的字符。

于 2013-02-19T02:35:10.750 回答