关于建设网站的报告书,溜冰后做爰在线网站,学习怎么做网站,榆次做企业网站题目来源
信息学奥赛一本通#xff08;C版#xff09;在线评测系统 题目描述 1144#xff1a;单词翻转 时间限制: 1000 ms 内存限制: 65536 KB 提交数:60098 通过数: 26099 【题目描述】 输入一个句子(一行)#xff0c;将句子中的每一个单词翻转后输出。 【输入…题目来源
信息学奥赛一本通C版在线评测系统 题目描述 1144单词翻转 时间限制: 1000 ms 内存限制: 65536 KB 提交数:60098 通过数: 26099 【题目描述】 输入一个句子(一行)将句子中的每一个单词翻转后输出。 【输入】 只有一行为一个字符串不超过500个字符。单词之间以空格隔开。 【输出】 翻转每一个单词后的字符串单词之间的空格需与原文一致。 【输入样例】 hello world 【输出样例】 olleh dlrow 题目限制
一次遍历解题 思路分析
解题思路 输入处理 首先我们需要读取输入的句子将其存储在一个字符串中。由于句子中可能包含空格我们可以使用 getline 函数来读取整行输入。 单词分割与翻转 遍历输入的字符串通过空格来识别每个单词的边界。对于每个单词我们可以使用双指针法进行翻转。具体来说我们设置两个指针一个指向单词的起始位置另一个指向单词的结束位置然后交换这两个指针所指向的字符并将指针向中间移动直到两个指针相遇。 输出结果 完成所有单词的翻转后将处理后的字符串输出。 具体代码
#includeiostream
#includestring
using namespace std;
int main()
{int left 0, right 0;string str; getline(cin, str);for (int i 0; i str.size(); i){if (str[i] || i str.size()){right--;while (left right){swap(str[left], str[right--]);}left i 1;right i 1;}else right;}cout str;
}
代码功能概述 这段代码的主要功能是对输入的一行字符串中的每个单词进行反转同时保持单词在字符串中的顺序不变。例如输入 hello world输出将是 olleh dlrow。
代码逻辑详细解释 变量初始化 left 和 right 初始化为 0它们将用于标记每个单词的起始和结束位置。str 是用于存储用户输入的字符串通过 getline(cin, str) 从标准输入读取一行字符串。 遍历字符串 使用 for 循环遍历字符串循环变量 i 从 0 到 str.size()注意这里包含了 str.size() 这个边界用于处理最后一个单词。当遇到空格str[i] 或者到达字符串末尾i str.size()时说明一个单词结束。此时right 减 1因为之前 right 多走了一步然后进入 while 循环该循环用于反转当前单词。在 while 循环中使用 swap 函数交换 left 和 right 位置的字符并将 left 递增right 递减直到 left 不小于 right完成单词的反转。反转完成后更新 left 和 right 的值为 i 1即指向下一个单词的起始位置。如果当前字符不是空格right 加 1继续扩展当前单词的范围。 输出结果 遍历结束后所有单词都已反转通过 cout str; 输出处理后的字符串。