sdut 1916 字符串拓展

在这里插入图片描述
第一次是用STL写的,结果TLE了,代码如下:
用到了find(); replace();两个函数;猜测由于cin流的形式输入导致超时,大佬有兴趣可以看看能否改进,初学C++和STL,没有头绪。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
bool judge (char a,char b)//判断是否符合拓展规则
{
    if((a>='a'&&a<='z'&&b>='a'&&b<='z'&&a<=b)||(a>='A'&&a<='Z'&&b>='A'&&b<='Z'&&a<=b)||(a>='0'&&a<='9'&&b>='0'&&b<='9'&&a<=b))
    return true;
    else return false;
}
string expend(char a,char b)//根据头尾两个字符补全字符串
{
    string s;
    for(int i=(int)a+1;i<int(b);i++)
    {
        s+=char(i);
    }
    return s;
}
int main()
{
    int t;
    cin >> t;
    string s;
    string x="-";
    while(t--)
    {
        int p=0;
        cin >> s;
        while((p=s.find_first_of(x,p))!=s.npos)//不能再找到‘-’时停止循环
        {
            if(judge(s[p-1],s[p+1])==1)
            s.replace(p,1,expend(s[p-1],s[p+1]));//将‘-’拓展填入字符串
        }
        cout << s << endl;
    }
    return 0;
}


下面是换另外思路的AC代码,使用了字符数组:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1005];
int main(){
	int t;
	int len;
	int i,j;
	scanf("%d",&t);
	getchar();
	while(t--){
		gets(a);
		len=strlen(a);
		printf("%c",a[0]);
		for(i=1;i<len;i++){
			if(a[i]=='-'&&a[i-1]<=a[i+1]&&((a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z')||(a[i-1]>='A'&&a[i-1]<='Z'&&a[i+1]>='A'&&a[i+1]<='Z')||(a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9'))){
				for(j=a[i-1]+1;j<=a[i+1]-1;j++)
					printf("%c",j);
			}
			else
				printf("%c",a[i]);
		}
		printf("\n");
	}
	return 0;
} 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDUT 是山东理工大学(Shandong University of Technology)的缩写,这里我假设你是在问关于 Python 字符串的问题。 Python 中的字符串是一种不可变的序列类型,用于表示 Unicode 字符序列。Python 字符串可以用单引号、双引号或三引号括起来,三引号可以用于表示多行字符串。例如: ```python s1 = 'Hello, world!' s2 = "Hello, world!" s3 = '''Hello, world!''' ``` 如果你需要在字符串中使用单引号或双引号,可以使用另一种引号来括起来字符串,例如: ```python s4 = "I'm a student." s5 = 'He said, "Hello, world!"' ``` Python 提供了一些内置的字符串方法,例如: - `str.lower()`:返回字符串的小写形式。 - `str.upper()`:返回字符串的大写形式。 - `str.strip([chars])`:移除字符串开头或结尾的指定字符,默认移除空格符。 - `str.split([sep[, maxsplit]])`:使用指定的分隔符将字符串分割为子字符串。 - `str.join(iterable)`:使用字符串将可迭代对象中的元素连接起来。 - `str.replace(old, new[, count])`:返回将字符串中指定子字符串替换为新字符串后的副本。 例如: ```python s = ' Hello, world! ' s = s.strip() # 移除开头和结尾的空格符 print(s.lower()) # 输出:hello, world! print(s.upper()) # 输出:HELLO, WORLD! print(s.split(',')) # 输出:['Hello', ' world!'] print('-'.join(s.split(','))) # 输出:Hello- world! print(s.replace('world', 'Python')) # 输出:Hello, Python! ``` 希望这些信息对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值