Нужна программа для реверса слов в строку - PullRequest
1 голос
/ 30 октября 2009

Я задавал этот вопрос в нескольких интервью. Я хочу узнать от читателей Stackoverflow, каким должен быть ответ на этот вопрос.

Такой, казалось бы, простой вопрос, но он был истолкован довольно разными способами.

Ответы [ 6 ]

1 голос
/ 03 мая 2014

Если вы хотите учесть также пробелы, вы можете сделать это так:

   string word = "hello    my name   is";
   string result="";
   int k=word.size();
   for (int j=word.size()-1; j>=0; j--)
   {       
       while(word[j]!= ' ' && j>=0)
           j--;

       int end=k;
       k=j+1;
       int count=0;
       if (j>=0)  
       {        
           int temp=j;
           while (word[temp]==' '){
               count++;
               temp--;           
           }           
           j-=count;
       }        
       else j=j+1;       

       result+=word.substr(k,end-k);
       k-=count;
       while(count!=0)
       {
           result+=' ';
           count--;
       }
   }  

Он распечатает для вас "is name my hello"

1 голос
/ 30 октября 2009

если ваше определение слова - это серия непробельных символов, окруженных пробельным символом, то в 5-секундном псевдокоде вы делаете:

var words = split(inputString, " ")
var reverse = new array
var count = words.count -1
var i = 0
while count != 0
   reverse[i] = words[count]
   count--
   i++
return reverse
0 голосов
/ 17 декабря 2013

Следующий код (C ++) преобразует строку this is a test в test a is this:

string reverseWords(string str)
{
    string result = "";

    vector<string> strs;
    stringstream S(str);
    string s;
    while (S>>s)
        strs.push_back(s);

    reverse(strs.begin(), strs.end());

    if (strs.size() > 0)
        result = strs[0];
    for(int i=1; i<strs.size(); i++)
        result += " " + strs[i];

    return result;
}

PS: на самом деле это вопрос застревания кода Google, дополнительную информацию можно найти здесь .

0 голосов
/ 17 октября 2013
#include<stdio.h>
void reverse_word(char *,int,int);
int main()
{
char s[80],temp;
int l,i,k;
int lower,upper;
printf("Enter the ssentence\n");
gets(s);
l=strlen(s);
printf("%d\n",l);
k=l;
for(i=0;i<l;i++)
{
if(k<=i)
{temp=s[i];
s[i]=s[l-1-i];
s[l-1-i]=temp;}
k--;
}
printf("%s\n",s);
lower=0;
upper=0;
for(i=0;;i++)
{
if(s[i]==' '||s[i]=='\0')
{upper=i-1;
reverse_word(s,lower,upper);
lower=i+1;
}
if(s[i]=='\0')
break;
}
printf("%s",s);
return 0;
}

void reverse_word(char *s,int lower,int upper)
{
char temp;
//int i;
while(upper>lower)
{
temp=s[lower];
s[lower]=s[upper];
s[upper]=temp;
upper=upper-1;
lower=lower+1;
}
}
0 голосов
/ 30 октября 2009

Это появилось в LessThanDot Programmer Puzzles

0 голосов
/ 30 октября 2009

Взято из чего-то под названием «Взлом интервью Google», которое было где-то на моем компьютере ... не знаю, откуда я его взял, но я помню, что видел именно этот вопрос внутри ... вот ответ:

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

...