2009-10-29 41 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"

相关问题