Инвертируйте упорядочивание слов в строке

Чтобы получить URL-адрес файла, который использует FileField, вы можете просто вызвать атрибут url у FieldFile (это экземпляр файла, а не поле), он использует класс Storage для определения URL-адреса для этого файла. Это очень просто, если вы используете внешнее хранилище, такое как Amazon S3, или если ваше хранилище меняется.

get_thumbnail_url будет выглядеть следующим образом.

def get_thumbnail_url(self, obj):
    return obj.thumbnail.url

Вы также можете использовать его в шаблоне следующим образом:

{{ current_project.thumbnail.url }}
68
задан Arnkrishn 20 July 2012 в 23:15
поделиться

9 ответов

Переверните всю строку, а затем переверните буквы каждого отдельного слова.

После первого прохода строка будет

s1 = "Z Y X si eman yM"

, а после второго прохода -

s1 = "Z Y X is name My"
129
ответ дан 24 November 2019 в 14:02
поделиться

Невозможно выполнить разворот без какой-либо дополнительной структуры данных. Я думаю, что самой маленькой структурой был бы один символ в качестве буфера, пока вы меняете буквы. Его все еще можно считать «на месте», но он не полностью «лишенный дополнительных структур данных».

Ниже приведен код, реализующий то, что описывает Ящерица Билла:

string words = "this is a test";

// Reverse the entire string
for(int i = 0; i < strlen(words) / 2; ++i) {
  char temp = words[i];
  words[i] = words[strlen(words) - i];
  words[strlen(words) - i] = temp;
}

// Reverse each word
for(int i = 0; i < strlen(words); ++i) {
  int wordstart = -1;
  int wordend = -1;
  if(words[i] != ' ') {
    wordstart = i;
    for(int j = wordstart; j < strlen(words); ++j) {
      if(words[j] == ' ') {
        wordend = j - 1;
        break;
      }
    }
    if(wordend == -1)
      wordend = strlen(words);
    for(int j = wordstart ; j <= (wordend + wordstart) / 2 ; ++j) {
      char temp = words[j];
      words[j] = words[wordend - (j - wordstart)];
      words[wordend - (j - wordstart)] = temp;
    }
    i = wordend;
  }
}
4
ответ дан 24 November 2019 в 14:02
поделиться

На каком языке? Если PHP, вы можете взорвать пространство, а затем передать результат в array_reverse.

Если это не PHP, вам придется сделать что-то более сложное, например:

words = aString.split(" ");
for (i = 0; i < words.length; i++) {
    words[i] = words[words.length-i];
}
3
ответ дан 24 November 2019 в 14:02
поделиться
public static String ReverseString(String str)
{
    int word_length = 0;
    String result = "";
    for (int i=0; i<str.Length; i++)
    {
        if (str[i] == ' ')
        {
            result = " " + result;
            word_length = 0;
        } else 
        {
            result = result.Insert(word_length, str[i].ToString());
            word_length++;
        }
    }
    return result;
}

Это код C #.

2
ответ дан 24 November 2019 в 14:02
поделиться
Not exactly in place, but anyway: Python:

>>> a = "These pretzels are making me thirsty"
>>> " ".join(a.split()[::-1])
'thirsty me making are pretzels These'
14
ответ дан 24 November 2019 в 14:02
поделиться

Фактически, первый ответ:

words = aString.split(" ");
for (i = 0; i < words.length; i++) {
    words[i] = words[words.length-i];
}

не работает, потому что он отменяет во второй половине цикла работу, проделанную в первой половине. Итак, i

words = aString.split(" "); // make up a list
i = 0; j = words.length - 1; // find the first and last elements
while (i < j) {
    temp = words[i]; words[i] = words[j]; words[j] = temp; //i.e. swap the elements
    i++; 
    j--;
}

Примечание: я не знаком с синтаксисом PHP, и я догадался, что синтаксис инкрементного и декрементного значений похож на Perl.

0
ответ дан 24 November 2019 в 14:02
поделиться

перевернуть строку, а затем, на втором проходе, перевернуть каждое слово ...

в C #, полностью на месте без дополнительных массивов:

static char[] ReverseAllWords(char[] in_text)
{
    int lindex = 0;
    int rindex = in_text.Length - 1;
    if (rindex > 1)
    {
        //reverse complete phrase
        in_text = ReverseString(in_text, 0, rindex);

        //reverse each word in resultant reversed phrase
        for (rindex = 0; rindex <= in_text.Length; rindex++)
        {
            if (rindex == in_text.Length || in_text[rindex] == ' ')
            {
                in_text = ReverseString(in_text, lindex, rindex - 1);
                lindex = rindex + 1;
            }
        }
    }
    return in_text;
}

static char[] ReverseString(char[] intext, int lindex, int rindex)
{
    char tempc;
    while (lindex < rindex)
    {
        tempc = intext[lindex];
        intext[lindex++] = intext[rindex];
        intext[rindex--] = tempc;
    }
    return intext;
}
33
ответ дан 24 November 2019 в 14:02
поделиться

В c это можно сделать так: O (N) и только с использованием O (1) структур данных (т.е. char).

#include<stdio.h>
#include<stdlib.h>
main(){
  char* a = malloc(1000);
  fscanf(stdin, "%[^\0\n]", a);
  int x = 0, y;
  while(a[x]!='\0')
  {
    if (a[x]==' ' || a[x]=='\n')
    {
      x++;
    }
    else
    {
      y=x;
      while(a[y]!='\0' && a[y]!=' ' && a[y]!='\n')
      { 
        y++;
      }
      int z=y;
      while(x<y)
      {
        y--;
        char c=a[x];a[x]=a[y];a[y]=c; 
        x++;
      }
      x=z;
    }
  }

  fprintf(stdout,a);
  return 0;
}
0
ответ дан 24 November 2019 в 14:02
поделиться

Как насчет ...

var words = "My name is X Y Z";
var wr = String.Join( " ", words.Split(' ').Reverse().ToArray() );

Думаю, это не в строке.

0
ответ дан 24 November 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: