为什么用string写的比用纯C直接输出写的还快一倍?
查看原帖
为什么用string写的比用纯C直接输出写的还快一倍?
319478
zhibuba楼主2020/7/20 11:48
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>

using namespace std;

int p1, p2, p3;
string s;

string expand(char a, char b)
{
    string str;
    if (isdigit(a) && isdigit(b) && a < b)
    {
        if (p1 != 3)
            for (char c = a + 1; c <= b - 1; c++)
                str += string(p2, c);
        else
            str += string((b - a - 1) * p2, '*');
    }
    else if (islower(a) && islower(b) && a < b)
    {
        if (p1 == 1)
            for (char c = a + 1; c <= b - 1; c++)
                str += string(p2, c); 
        else if (p1 == 2)
            for (char c = a + 1; c <= b - 1; c++)
                str += string(p2, toupper(c));
        else
            str += string((b - a - 1) * p2, '*');
    }
    else
        str += '-';
    if (p3 == 2)
        reverse(str.begin(), str.end());
    return str;
}

int main()
{
    cin >> p1 >> p2 >> p3 >> s;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == '-')
            cout << expand(s[i - 1], s[i + 1]);
        else
            cout << s[i];
    }
    return 0;
}
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
	int p1, p2, p3;
	scanf("%d %d %d", &p1, &p2, &p3);
	char s[101];
	scanf("%s", s);
	int len = strlen(s);
	for (int i = 0; i < len; i++)
	{
		if (s[i] != '-')
			putchar(s[i]);
		else
		{
			if (s[i + 1] <= s[i - 1] || ! ((isdigit(s[i + 1]) && isdigit(s[i - 1]))
					|| (islower(s[i + 1]) && islower(s[i - 1]))))
				putchar(s[i]);
			else if (s[i + 1] == s[i - 1] + 1)
				;
			else
			{
				char a, b;
				if (p3 == 1)
					a = s[i - 1] + 1, b = s[i + 1] - 1;
				else
					a = s[i + 1] - 1, b = s[i - 1] + 1;
				for (int d = a; (p3 == 1 && d <= b) || (p3 == 2 && d >= b); 
					 d += (p3 == 1 ? 1 : -1)) 
				{
					for (int t = 0; t < p2; t++)
					{
						switch(p1)
						{
							case 1: putchar(tolower(d)); break;
							case 2: putchar(toupper(d)); break;
							case 3: putchar('*'); break;
						}
					}
				}
			}		
		}
	}
	return 0;
}
2020/7/20 11:48
加载中...