题目

牛牛爱字符串

思路

字符串 + 模拟。
在每一个串中找到一串数字串使用 str.substr() 截取下来,进行去前导零以及判零的操作。
str.substr(x1, x2):截取到的是 这个串从 位置开始长度为 的串。

Code

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>

std::string s;

int main() {
    while(1) {
        getline(std::cin, s);
        if (s == "") break;
        int len = s.length();
        int last = -1;
        for (int i = 0; i < len; ++i) {
            if (last == -1 && s[i] >= '0' && s[i] <= '9') last = i;
            if (last != -1 && (s[i] <'0' || s[i] > '9')) {
                std::string sss = s.substr(last, i - last);
                int l = sss.length();
                bool flag = 0;
                for (int j = 0; j < l; ++j) {
                    if (sss[j] != '0') flag = 1;
                    if (!flag && sss[j] == '0') continue;
                    printf("%c", sss[j]);
                }
                if (flag == 0) printf("0 ");
                else printf(" ");
                last = -1;
            }
        }
        if (last != -1) {
            std::string sss = s.substr(last, len - last);
            int l = sss.length();
            bool flag = 0;
            for (int j = 0; j < l; ++j) {
                if (sss[j] != '0') flag = 1;
                if (!flag && sss[j] == '0') continue;
                printf("%c", sss[j]);
            }
            if (flag == 0) printf("0 ");
            else printf(" ");
            last = -1;
        }
        puts("");
        s = "";
    }
    return 0;
}