当前位置:   article > 正文

HJ10 字符个数统计HJ11 数字颠倒HJ12 字符串反转

HJ10 字符个数统计HJ11 数字颠倒HJ12 字符串反转

HJ10 字符个数统计

字符个数统计_牛客题霸_牛客网

题目分析

这个问题可以通过维护一个字符出现频率的数组来解决。考虑到 ASCII 码的范围是 0~127,我们可以创建一个长度为 128 的布尔数组(或者使用位操作优化空间),用来标记某个字符是否出现过。遍历输入字符串的每个字符,如果该字符在 ASCII 范围内,并且之前未标记过,就将其对应的标记位置为 true 并增加不同字符的计数。最后,输出不同字符的总数即可。

题解代码

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int countUniqueCharacters(const string& str) {
  5. // 创建一个布尔数组来标记字符是否出现过,初始都为 false
  6. bool appeared[128] = {false};
  7. int count = 0; // 用于统计不同字符的数量
  8. for (char ch : str) {
  9. // 检查字符是否在 ASCII 范围内
  10. if (ch >= 0 && ch <= 127) {
  11. // 如果该字符之前没有出现过,增加计数并标记为已出现
  12. if (!appeared[ch]) {
  13. appeared[ch] = true;
  14. ++count;
  15. }
  16. }
  17. }
  18. return count;
  19. }
  20. int main() {
  21. string input;
  22. cin >> input; // 读取输入的字符串
  23. cout << countUniqueCharacters(input) << endl; // 输出不同字符的数量
  24. return 0;
  25. }

我的代码

  1. #include <iostream>
  2. #include <string>
  3. #include <unordered_set>
  4. int main() {
  5. std::string line;
  6. std::unordered_set<char> uset;
  7. std::getline(std::cin, line);
  8. for (char i: line) {
  9. uset.insert(i);
  10. }
  11. std::cout << uset.size() << std::endl;
  12. return 0;
  13. }

HJ11 数字颠倒

数字颠倒_牛客题霸_牛客网

题目分析

为了解决这个问题,我们可以首先将整数转换成字符串,然后逆序这个字符串。C++ 中有多种方法可以完成这个任务,但最直接的方法是使用标准库中的 `std::to_string` 函数将整数转换为字符串,接着使用 `std::reverse` 对字符串进行逆序操作。

下面是具体的实现步骤:

1. 使用 `std::to_string` 将输入的整数转换为字符串。
2. 使用 `std::reverse` 函数逆序字符串。
3. 输出逆序后的字符串。

下面是实现这个逻辑的 C++ 代码示例:

  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm> // 包含 std::reverse
  4. int main() {
  5.     unsigned int n;
  6.     std::cin >> n; // 读取输入的整数
  7.     // 将整数转换为字符串
  8.     std::string str = std::to_string(n);
  9.     // 使用 std::reverse 逆序字符串
  10.     std::reverse(str.begin(), str.end());
  11.     // 输出逆序后的字符串
  12.     std::cout << str << std::endl;
  13.     return 0;
  14. }

这段代码首先从标准输入读取一个整数,然后将其转换为字符串并逆序,最后输出逆序后的字符串。注意,这个程序假设输入的整数是非负的,符合题目要求。

我的解法

  1. #include <iostream>
  2. int main() {
  3. int num;
  4. std::cin >> num;
  5. if (num == 0) std::cout << num;
  6. while (num > 0) {
  7. int out = num % 10;
  8. std::cout << out;
  9. num = num / 10;
  10. }
  11. return 0;
  12. }

HJ12 字符串反转

字符串反转_牛客题霸_牛客网

题目分析

  1. 读取输入:首先,需要读取一行输入,这行输入是一个只包含小写字母的字符串。
  2. 反转字符串:使用C++标准库中的功能或者自定义的方式来反转字符串。
  3. 输出结果:打印或输出反转后的字符串。
    1. #include <iostream>
    2. #include <algorithm> // 包含 std::reverse
    3. using namespace std;
    4. int main() {
    5. string str;
    6. cin >> str; // 读取输入
    7. reverse(str.begin(), str.end()); // 反转字符串
    8. cout << str << endl; // 输出结果
    9. return 0;
    10. }
    方法2:自定义函数实现反转、
    1. #include <iostream>
    2. using namespace std;
    3. int main() {
    4. string str;
    5. cin >> str; // 读取输入
    6. int n = str.length();
    7. // 自定义反转
    8. for(int i = 0; i < n / 2; ++i) {
    9. swap(str[i], str[n - i - 1]);
    10. }
    11. cout << str << endl; // 输出结果
    12. return 0;
    13. }

    HJ13 句子逆序

  4. 句子逆序_牛客题霸_牛客网

题目分析

  1. 分割单词:将每个输入的句子按空格分割成单词。
  2. 逆序排放:将分割出来的单词数组逆序。
  3. 输出结果:将逆序后的单词数组重新组合成一个句子,并输出。

acm代码

  1. #include <iostream>
  2. #include <vector>
  3. #include <sstream>
  4. #include <algorithm>
  5. int main() {
  6. std::string line;
  7. std::getline (std::cin , line);
  8. std::istringstream iss(line);
  9. std::vector<std::string> words;
  10. std::string word;
  11. while (iss >> word) {
  12. words.push_back(word);
  13. }
  14. std::reverse(words.begin(), words.end());
  15. for (int i = 0; i < words.size(); i ++) {
  16. std::cout << words[i];
  17. if (i != words.size() - 1) {
  18. std::cout << " ";
  19. }
  20. }
  21. std::cout << std::endl;
  22. return 0;
  23. }

我的解法

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. int main() {
  6. std::string line;
  7. std::string temp;
  8. std::getline(std::cin, line);
  9. std::vector<std::string> vec;
  10. for (int i = 0; i < line.size(); i++) {
  11. if (line[i] != ' ') {
  12. temp.push_back(line[i]);
  13. }
  14. else if (line[i] == ' ' ){
  15. vec.push_back(temp);
  16. temp.clear();
  17. }
  18. if (i == (line.size() - 1)) vec.push_back(temp);
  19. }
  20. std::reverse(vec.begin(), vec.end());
  21. for (std::string i: vec) {
  22. std::cout << i << " ";
  23. }
  24. return 0;
  25. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/310004
推荐阅读
相关标签
  

闽ICP备14008679号