2009-10-29 58 views
1

我在幾次採訪中問了這個問題。我想從Stackoverflow的讀者那裏知道這個問題應該是什麼答案。需要一個程序來反轉字符串中的單詞

這樣一個看似簡單的問題,但已被解釋了不少不同的方式。

+2

你問的問題,或者有人問你? – pavium 2009-10-30 00:02:25

回答

0

從我的計算機某處被稱爲「Hacking a Google Interview」的東西拿來......不知道從哪裏得到它但我記得我在裏面看到了這個確切的問題......這裏是答案:

通過與最後 字符,第二個與第二 到最後一個字符,等等調換 第一個字符反向的字符串。 然後,通過查找 的字符串查找空格,以便找到每個單詞所在的位置 。將 中的每一個都反過來 用 最後一個字符交換第一個字符,第二個字符 用倒數第二個字符和 等等。

1

,如果你的一個「字」的定義是一系列非空白字符的空白字符包圍,然後以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
#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

這是我的程序。 – Sarwan 2013-10-17 09:57:36

0

下面的代碼(C++),將轉換的字符串this is a testtest 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:它實際上是一個谷歌代碼果醬問題,更多信息可以發現here

1

如果要考慮到還的空間,你可以做這樣的:

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"

相關問題