需要一个程序来反转字符串中的单词
答
从我的计算机某处被称为“Hacking a Google Interview”的东西拿来......不知道从哪里得到它但我记得我在里面看到了这个确切的问题......这里是答案:
通过与最后 字符,第二个与第二 到最后一个字符,等等调换 第一个字符反向的字符串。 然后,通过查找 的字符串查找空格,以便找到每个单词所在的位置 。将 中的每一个都反过来 用 最后一个字符交换第一个字符,第二个字符 用倒数第二个字符和 等等。
答
,如果你的一个“字”的定义是一系列非空白字符的空白字符包围,然后以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
答
#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
答
下面的代码(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:它实际上是一个谷歌代码果酱问题,更多信息可以发现here。
答
如果要考虑到还的空间,你可以做这样的:
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"
你问的问题,或者有人问你? – pavium 2009-10-30 00:02:25