482. 密钥格式化

题干

https://leetcode-cn.com/problems/license-key-formatting/

代码

class Solution {
   public:
    string licenseKeyFormatting(string s, int k) {
        int cnt = 0;
        string a;
        for (int i = s.size() - 1; i >= 0; i--) {
            if (s[i] != '-') {
                a.push_back(toupper(s[i]));
                cnt++;
                if (cnt % k == 0) {
                    a.push_back('-');
                }
            }
        }
        if (a.size() > 0 && a.back() == '-') {
            a.pop_back();
        }
        string ss;
        for (int i = a.size() - 1; i >= 0; i--) {
            ss.push_back(a[i]);
        }
        return ss;
    }
};

写题过程错误

#include <bits/stdc++.h>

#include <iostream>
using namespace std;
int main() {
    string s, a;
    int k;
    cin >> s >> k;
    int cnt = 0;
    for (int i = s.size() - 1; i >= 0;i--) {  //错题:此处不能用size_t这种类型,会陷入死循环,一直为真
        if (s[i] != '-') {
            a.push_back(toupper(s[i]));
            cnt++;
            if (cnt % k == 0) {
                a.push_back('-');
            }
        }
    }
    if (a.size() > 0 && a.back() == '-') {
        a.pop_back();
    }
    reverse(a.begin(), a.end());
    cout << a;
    return 0;
}

总结

1.在循环中要注意使用循环变量的类型,size_t类型的变量永远不会为负,也不会为0,如果在循环中使用它非常容易陷入死循环,并且编译器检查不出来。

2.reverse()函数可以将一个字符串倒转过来,传入的形参是两个双向迭代器,分别指向数组或其它类型的首尾,返回一个倒转后的数组或其它类型

posted @ 2021-10-04 16:58  ycloong  阅读(39)  评论(0)    收藏  举报