我刚开始学习C ++。我正在编写一个程序来反转字符串中单词的顺序。如果有一句话,"我爱纽约!"。它应该改为,"!约克新爱我"。
我使用的算法有两个简单的步骤。
例如,对于上面的字符串,我将首先将其转换为"!kroY weN evol I"然后我会改变像#34;!kroY"去约克!"。
现在的问题是,我怎么知道这个单词的起始位置和结束位置。这就是我到目前为止所做的。但是这个程序没有按预期工作。我无法识别这个词,然后将其反转。
#include <iostream>
#include <string>
std::string reverseText(std::string x){
std::string y;
for(int i=x.size()-1;i>=0;i--) y += x[i];
return y;
}
std::string reverseWords(std::string x){
std::string y = reverseText(x);
bool wordFound = true;
std::string temp1,ans;
for(size_t i=0;i<y.size();i++){
if(wordFound){
if(y[i]!=' ') temp1+=y[i]; // if there is a letter, store that in temp1.
else if(y[i]==' ') // if there is a space, that means word has ended.
{
ans += reverseText(temp1); // store that word, in ans.
temp1=" ";
wordFound=false;}
}
if(y[i]==' ' && y[i+1]!=' ') wordFound=true;
}
return ans;
}
int main(){
std::cout<<reverseWords("My name is Michael");
}
输出:Michaelis名称
答案 0 :(得分:1)
我没有对此进行过广泛的测试,但仍然可能存在问题,但它为您提供的案例产生了正确的输出。我试图修改你的代码而不用太多改变它。
#include <iostream>
#include <string>
std::string reverseText(std::string x){
std::string y;
for(int i=x.size()-1;i>=0;i--) y += x[i];
return y;
}
std::string reverseWords(std::string x) {
std::string y = reverseText(x);
bool wordFound = true;
std::string temp1 = " ", ans;
for(size_t i = 0; i < y.size(); i++) {
if(wordFound){
if(y[i] != ' '){
temp1 += y[i]; // if there is a letter, store that in temp1.
} else if(y[i]==' ') { // if there is a space, that means word has ended.
ans += reverseText(temp1); // store that word, in ans.
temp1 = " ";
wordFound=false;
}
}
if(y[i]==' ' && y[i+1]!=' ') wordFound=true;
}
ans += reverseText(temp1);
return ans;
}
int main(){
std::cout<<reverseWords("My name is Michael");
}
变更摘要
您忘记使用空格
初始化第一个字符串std::string temp1 = " ", ans;
循环过后,你忘了将temp1的内容“刷新”回答
ans += reverseText(temp1);