#include<iostream>
#include<string>
using namespace std;
int main()
{
string str; //输入一句话
string skt;
int j = 0;
int k;
int c;
cout << "输入要逆向输出的句子" << endl;
getline(cin,str);
skt = str; //赋值给另一个字符串
for (int i = 0; i < str.length()/2; i++)
{
skt[i] = skt[skt.length() - i - 1];
str[str.length() - i - 1] = str[i];
str[i] = skt[i];
} //达到全部倒过来的效果
skt = str; //再次赋值
while (j < str.length())
{
while (j!=str.length()&&str[j] == 32) //如果等于空格就判断下一位是否空格
{
j++;
}
c = j; //将当前非空格下标赋值给c
k = j-1; //将上一个下标赋值给k
while (j!=str.length()&&str[j] != 32) //判断当前是否有字符
{
k++; //如果有就让k代表当前字符下标
j++; //继续判断下一个字符
}
int a = (k - c) / 2; //让结束字符下标减去最开始的字符下标 对2求余
if (k - c == 1)
{
a = 1;
}
for (int b = 0; b < a; b++) //开始交换当前字符串的位置 例如:45->54
{
str[c + b] = skt[k - b];
str[k - b] = skt[c + b];
}
}
cout << str << endl;
return 0;
}
首先,当我们拿到一个需求或题目无法下手时,应该想到什么先写了在进行优化,这也是我们程序员常用的螺旋式编程手法。在这个笔试题中,我们先将输入的所有字符进行了倒序。然后在用后面的代码以单词为单位在内部进行调换。值得注意的是,这个笔试题还有运行效率的要求,所有新手在以后的代码编写中可以多注意一下这个方面,为以后的工作打下坚实的基础.
谢谢大家的观看.
---------------------------玉无涯