例如:你好吗? ----> woh era uoy?
这是我的代码,我得到了它的工作,但问号也在逆转。 我怎样才能使它保持完整?
#include <iostream>
using namespace std;
int main()
{
string ch;
while(cin >> ch)
{
for(int i = ch.length() - 1; i >= 0; i--)
{
cout << ch[i];
}
cout << " ";
}
return 0;
}
答案 0 :(得分:2)
您选择的输入法(cin >> ch
)会自动将输入拆分为单独的单词。
就像Jerry Coffin中answer所说的那样,你必须跳过标点符号等来找到要交换的字母字符。大概是这样的:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string ch;
while (cout << "String? " && cin >> ch)
{
cout << "Input: <<" << ch << ">>\n";
const char *bp = ch.c_str();
const char *ep = ch.c_str() + ch.length() - 1;
const char *sp = ch.c_str();
while (sp < ep)
{
while (sp < ep && (*sp != ' ' && !isalpha(*sp)))
sp++;
while (sp < ep && (*ep != ' ' && !isalpha(*ep)))
ep--;
char c = *sp;
ch[sp-bp] = *ep;
ch[ep-bp] = c;
sp++;
ep--;
}
cout << "Output: <<" << ch << ">>\n";
}
cout << endl;
return 0;
}
String? How are you?
Input: <<How>>
Output: <<woH>>
String? Input: <<are>>
Output: <<era>>
String? Input: <<you?>>
Output: <<uoy?>>
String? Pug!natious=punctuation.
Input: <<Pug!natious=punctuation.>>
Output: <<noi!tautcnu=psuoitanguP.>>
String?
你可以从这里调整它。我远非声称这是惯用的C ++;在中间使用const char *
显示我的C背景。
答案 1 :(得分:1)
从字符串的开头开始,向前扫描直到找到一个字母。从末尾向后扫描,直到找到一个字母。交换它们。继续,直到两个职位相遇。
注意:上面我使用了“字母”,但我真正的意思是“应该颠倒的字符之一”。你没有非常精确地定义哪些角色应该被交换,哪些不应该,但我假设你(或你的老师)有一个合理的具体定义。
答案 2 :(得分:0)
尝试使用数组并扫描每个字母以查看是否有问号。如果有,请将其移动到数组的最后位置。
答案 3 :(得分:0)
简单的解决方案或黑客单独解决此案例。如果有更多案例评论它可以一起解决。
#include <iostream>
using namespace std;
int main()
{
string ch;
while(cin >> ch)
{
int flag = 0;
for(int i = ch.length() - 1; i >= 0; i--)
{
if(ch[i] != '?')
cout << ch[i];
else
flag = 1;
}
if(flag)
cout << "?";
else
cout << " ";
}
return 0;
}