【简单过滤】#89 A. String Task

本文介绍了一个简单的编程任务,要求处理给定的字符串,删除其中的所有元音,插入一个点字符在每个辅音之前,并将所有大写字母转换为小写。提供了一个具体的例子和代码实现。

A. String Task
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Petya started to attend programming lessons. On the first lesson his task was to write a simple program. The program was supposed to do the following: in the given string, consisting if uppercase and lowercase Latin letters, it:

  • deletes all the vowels,
  • inserts a character "." before each consonant,
  • replaces all uppercase consonants with corresponding lowercase ones.

Vowels are letters "A", "O", "Y", "E", "U", "I", and the rest are consonants. The program's input is exactly one string, it should return the output as a single string, resulting after the program's processing the initial string.

Help Petya cope with this easy task.

Input

The first line represents input string of Petya's program. This string only consists of uppercase and lowercase Latin letters and its length is from 1 to 100, inclusive.

Output

Print the resulting string. It is guaranteed that this string is not empty.

Sample test(s)
input
tour
output
.t.r
input
Codeforces
output
.c.d.f.r.c.s
input
aBAcAba
output
.b.c.b


题意是说给一个字符串,要求输出一个序列,只包含原字符串的非元音字母的小写形式,每个字母输出前要加一个点

首先处理大小写,我们直接把源字符串变成全小写的就好,tolower(char a)函数返回的就是当前字母的小写形式,然后我们判断一下这个字母是否元音字母,不是的话我们就输出点和这个字母即可

Code:

#include <cstdio>
#include <string>
#include <cstring> 
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
// http://codeforces.com/contest/118
// String Task

bool judge(char c)
{
	if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='y')return false;
	return true;
}

int main()
{
	string s;	cin>>s;
	for(int i=0;i<s.length();i++)
	{
		char now=tolower(s[i]);
		if(judge(now))cout<<'.'<<now;
	} 
	return 0;
} 



我想给下面的fragment单独写一个viewmodel,有这个必要吗?有的话该怎么改写 class AddItemsFragment : BaseFragment<FragmentAddItemsBinding>() { private var selectedIndex=-1 private var selectedMillis: Long = System.currentTimeMillis() private lateinit var calendarStart : Calendar private lateinit var calendarEnd: Calendar private val viewModel: TasksViewModel by viewModels(ownerProducer = { requireActivity() }) { object : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { val appDao = AppDatabase.getInstance(requireContext()).taskDao() val preferenceManager = PreferenceManagerLocal(requireContext()) return TasksViewModel(TaskRepository(requireContext(),appDao), preferenceManager) as T } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) calendarStart = Calendar.getInstance() calendarEnd = Calendar.getInstance() viewBinding.toolbar.setNavigationOnClickListener { findNavController().navigateUp() } viewBinding.cardStartTime.setOnClickListener { DateTimePicker.showDateTimePicker(requireContext(),calendarStart, viewBinding.tvStartTime) } viewBinding.cardEndTime.setOnClickListener { DateTimePicker.showDateTimePicker(requireContext(), calendarEnd,viewBinding.tvEndTime) } viewBinding.btnCancel.setOnClickListener { findNavController().navigateUp() } viewBinding.btnImportance.setOnClickListener { var checkedItem = selectedIndex.takeIf { it >= 0 } ?: 0 MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.hint_importance) .setSingleChoiceItems(R.array.importance_items,checkedItem){ dialog,which-> checkedItem=which viewBinding.btnImportance.text= when(checkedItem){ 0->getString(R.string.important_urgent) 1->getString(R.string.important_not_urgent) 2->getString(R.string.not_important_urgent) else -> getString(R.string.not_important_not_urgent) } selectedIndex=checkedItem dialog.dismiss() } .show() } viewBinding.btnSave.setOnClickListener { val title = viewBinding.etTitle.text?.toString()?.trim() if (title.isNullOrEmpty()) { viewBinding.etTitle.error = getString(R.string.hint_title_null) return@setOnClickListener } val description = viewBinding.etTlDescription.text?.toString() val startTime = calendarToLong(calendarStart) val endTime = calendarToLong(calendarEnd) val priority = when(selectedIndex){ 0-> Task.Priority.IMPORTANT_URGENT 1-> Task.Priority.IMPORTANT_NOT_URGENT 2-> Task.Priority.NOT_IMPORTANT_URGENT else -> Task.Priority.NOT_IMPORTANT_NOT_URGENT } val task = Task( title = title, description = description, startTime = startTime, endTime = endTime, isCompleted = false, priority = priority ) viewModel.addTask(task) findNavController().navigateUp() } } }
最新发布
09-30
为什么这个实现在我的topic接收到消息的时候, 这个handelr不被触发, 在启动的时候则被触发了init方法, 请帮我检查: @Slf4j @Component public class ScheduledTaskHandler implements TransformerSupplier<String, ScheduledTaskEvent, KeyValue<String, ScheduledTaskEvent>> { private final TaskHandlerRegistry handlerRegistry; private final Gson gson; private static final String STORE_NAME = “SCHEDULED-TASK-STORE”; public ScheduledTaskHandler(TaskHandlerRegistry handlerRegistry, Gson gson) { this.handlerRegistry = handlerRegistry; this.gson = gson; } @Override public Transformer<String, ScheduledTaskEvent, KeyValue<String, ScheduledTaskEvent>> get() { return new ScheduledTaskTransformer(handlerRegistry, gson); } @Override public Set<StoreBuilder<?>> stores() { return Set.of(Stores.keyValueStoreBuilder( Stores.persistentKeyValueStore(STORE_NAME), Serdes.String(), new JsonSerde<>(ScheduledTaskEvent.class) )); } static class ScheduledTaskTransformer implements Transformer<String, ScheduledTaskEvent, KeyValue<String, ScheduledTaskEvent>> { private final TaskHandlerRegistry handlerRegistry; private final Gson gson; private ProcessorContext context; private KeyValueStore<String, ScheduledTaskEvent> taskStore; private final ConcurrentMap<String, Cancellable> cancellableMap = new ConcurrentHashMap<>(); private final PriorityQueue pendingTasks = new PriorityQueue<>(Comparator.comparingLong(ScheduledTaskEvent::scheduledTime)); public ScheduledTaskTransformer(TaskHandlerRegistry handlerRegistry, Gson gson) { this.handlerRegistry = handlerRegistry; this.gson = gson; } @Override public void init(ProcessorContext context) { this.context = context; this.taskStore = context.getStateStore(STORE_NAME); // Recover pending tasks from state storage try (KeyValueIterator<String, ScheduledTaskEvent> iter = taskStore.all()) { while (iter.hasNext()) { KeyValue<String, ScheduledTaskEvent> entry = iter.next(); ScheduledTaskEvent task = entry.value; if (task.status() == TaskStatus.PENDING) { pendingTasks.add(task); scheduleTask(task); log.debug(“Recovered pending task: {} scheduled at {}”, task.taskId(), task.scheduledTime()); } } } } @Override public KeyValue<String, ScheduledTaskEvent> transform(String key, ScheduledTaskEvent event) { if (event.status() != TaskStatus.PENDING) { log.warn(“Received non-pending task: {}, status: {}”, event.taskId(), event.status()); return null; } removeExistingTask(event.taskId()); taskStore.put(event.taskId(), event); pendingTasks.add(event); scheduleTask(event); log.debug(“Scheduled new task: {} at {}”, event.taskId(), event.scheduledTime()); return null; } private void removeExistingTask(String taskId) { ScheduledTaskEvent existing = taskStore.get(taskId); if (existing != null) { // Cancel existing schedule Cancellable cancellable = cancellableMap.remove(taskId); if (cancellable != null) { cancellable.cancel(); } // Remove from pending queue pendingTasks.removeIf(task -> task.taskId().equals(taskId)); log.debug(“Removed existing task: {}”, taskId); } } private void scheduleTask(ScheduledTaskEvent task) { long delay = Math.max(0, task.scheduledTime() - Instant.now().getEpochSecond()); // Cancel any existing schedule for this task cancelExistingSchedule(task.taskId()); // Create accurate time schedules using stream context time Cancellable cancellable = context.schedule( Duration.ofMillis(delay), PunctuationType.WALL_CLOCK_TIME, timestamp -> executeTask(task) ); cancellable.cancel(); cancellableMap.put(task.taskId(), cancellable); log.debug(“Scheduled task: {} in {} seconds”, task.taskId(), delay); } private void cancelExistingSchedule(String taskId) { Cancellable existing = cancellableMap.remove(taskId); if (existing != null) { existing.cancel(); log.debug(“Cancelled existing schedule for task: {}”, taskId); } } private void executeTask(ScheduledTaskEvent task) { try { log.debug(“Executing task: {}”, task.taskId()); CommandHandler handler = handlerRegistry.getHandler(task.taskType()); if (handler == null) { throw new NoSuchElementException("No handler for type: " + task.taskType()); } // BaseCommand command = gson.fromJson(gson.toJson(task.data()), BaseCommand.class); TaskResult result = (TaskResult) handler.handle(gson.fromJson(gson.toJson(task), BetDelayAfterCommand.class)); if (result.status() == TaskStatus.EXECUTED) { ScheduledTaskEvent completedTask = ScheduledTaskEvent.markAsCompleted(task); finalizeTask(completedTask); log.debug(“Task completed: {}”, task.taskId()); } else { ScheduledTaskEvent failedTask = ScheduledTaskEvent.markAsFailed(task, result.errorMessage()); // Check if task should be retried if (failedTask.shouldRetry()) { long retryTime = calculateRetryTime(task); ScheduledTaskEvent retryTask = ScheduledTaskEvent.createForRetry( failedTask.taskId(), failedTask.taskType(), retryTime, failedTask.data(), failedTask.errorMessage(), failedTask.version() ); rescheduleTask(retryTask); log.warn(“Task failed, scheduling retry #{} for {} at {}”, retryTask.version(), task.taskId(), retryTime); } else { finalizeTask(failedTask); log.error(“Task failed permanently: {}”, task.taskId()); } } } catch (Exception e) { handleExecutionError(task, e); } } private void rescheduleTask(ScheduledTaskEvent retryTask) { taskStore.put(retryTask.taskId(), retryTask); pendingTasks.add(retryTask); scheduleTask(retryTask); context.forward(retryTask.taskId(), retryTask); } private void handleExecutionError(ScheduledTaskEvent task, Exception e) { log.error(“Task execution error: {}”, task.taskId(), e); ScheduledTaskEvent failedTask = ScheduledTaskEvent.markAsFailed(task, e.getMessage()); if (failedTask.shouldRetry()) { long retryTime = calculateRetryTime(task); ScheduledTaskEvent retryTask = ScheduledTaskEvent.createForRetry( failedTask.taskId(), failedTask.taskType(), retryTime, failedTask.data(), failedTask.errorMessage(), failedTask.version() ); rescheduleTask(retryTask); } else { finalizeTask(failedTask); } } private void finalizeTask(ScheduledTaskEvent task) { taskStore.put(task.taskId(), task); pendingTasks.removeIf(t -> t.taskId().equals(task.taskId())); cancellableMap.remove(task.taskId()); context.forward(task.taskId(), task); log.debug(“Finalized task: {} with status {}”, task.taskId(), task.status()); } @Override public void close() { // Clean up resources cancellableMap.values().forEach(cancellable -> { try { cancellable.cancel(); } catch (Exception e) { log.warn(“Error cancelling scheduled task”, e); } }); cancellableMap.clear(); pendingTasks.clear(); log.debug(“ScheduledTaskTransformer closed”); } // TODO: 7/31/2025 need change or del logic private long calculateRetryTime(ScheduledTaskEvent task) { // Exponential backoff with jitter: 2^retryCount * base + random jitter int baseDelay = 30; // seconds int maxDelay = 3600; // 1 hour double jitter = 0.1 * baseDelay * (new Random().nextDouble() * 2 - 1); long delay = (long) Math.min( Math.pow(2, task.version()) * baseDelay + jitter, maxDelay ); return Instant.now().getEpochSecond() + delay; } } } 这是我的拓扑config: @Bean public KStream<String, ScheduledTaskEvent> taskProcessingStream( StreamsBuilder streamsBuilder, ScheduledTaskHandler taskHandler, JsonSerde<ScheduledTaskEvent> taskSerde ) { KStream<String, ScheduledTaskEvent> inputStream = streamsBuilder .stream(scheduledTasksTopic, Consumed.with(Serdes.String(), taskSerde) .withTimestampExtractor(new TaskTimestampExtractor())); KStream<String, ScheduledTaskEvent> processedStream = inputStream .transform(taskHandler) .filter((key, value) -> value != null); processedStream.to(scheduledTasksResultsTopic, Produced.with(Serdes.String(), taskSerde)); return processedStream; }
08-02
<insert id="syncSameData"> INSERT INTO <foreach collection="sourceData" item="item" separator=" "> battery_${item.batteryId} USING my_battery_info TAGS ( #{item.batteryId} ) ( ts, battery_id, battery_voltage, battery_current, battery_soc, battery_hard_version, battery_soft_version, battery_work_mode, battery_protect_code, battery_error_code, battery_temperature_max, battery_temperature_min, battery_voltage_max, battery_voltage_min, mos_status, mos_temp, battery_cycle_times, steady_status, cell_voltage, model, manufacture, imei, imsi, iccid, tracker_hardware_version, tracker_software_version, csq, network_type, location_mode, longitude, longitude_direction, latitude, latitude_direction, gps_speed, gps_signal, satellite_num, accuracy, flag, client_id, topic, product_key, handled, todo_now, needack, businessmode, create_time, update_time, payload, project_id, sn, soh, battery_temperature_avg, charge_mode, low_battery_warn, charge_current_max, discharge_current_max, charge_current_avg, discharge_current_avg, gps_cog, total_charge_energy, charge_cycles_history, charge_capacity_history, discharge_capacity_history, ntc1, ntc2, ntc3, ntc4, tracker_communication_status, battery_kind, dsoc, correction_rate, tsoc, bsoc, fcc, actual_soh, charging_sop, discharging_sop, task_max_delay_1ms, task_max_delay_10ms, task_max_delay_100ms, task_max_delay_500ms, task_max_time_1ms, task_max_time_10ms, task_max_time_100ms, task_max_time_500ms, empty_count ) VALUES <foreach collection="item" item="item.records" separator=","> ( #{item.ts}, #{item.batteryId}, #{item.batteryVoltage}, #{item.batteryCurrent}, #{item.batterySoc}, #{item.batteryHardVersion}, #{item.batterySoftVersion}, #{item.batteryWorkMode}, #{item.batteryProtectCode}, #{item.batteryErrorCode}, #{item.batteryTemperatureMax}, #{item.batteryTemperatureMin}, #{item.batteryVoltageMax}, #{item.batteryVoltageMin}, #{item.mosStatus}, #{item.mosTemp}, #{item.batteryCycleTimes}, #{item.steadyStatus}, #{item.cellVoltage}, #{item.model}, #{item.manufacture}, #{item.imei}, #{item.imsi}, #{item.iccid}, #{item.trackerHardwareVersion}, #{item.trackerSoftwareVersion}, #{item.csq}, #{item.networkType}, #{item.locationMode}, #{item.longitude}, #{item.longitudeDirection}, #{item.latitude}, #{item.latitudeDirection}, #{item.gpsSpeed}, #{item.gpsSignal}, #{item.satelliteNum}, #{item.accuracy}, #{item.flag}, #{item.clientId}, #{item.topic}, #{item.productKey}, #{item.handled}, #{item.todoNow}, #{item.needAck}, #{item.businessMode}, #{item.createTime}, #{item.updateTime}, #{item.payload}, #{item.projectId}, #{item.sn}, #{item.soh}, #{item.batteryTemperatureAvg}, #{item.chargeMode}, #{item.lowBatteryWarn}, #{item.chargeCurrentMax}, #{item.dischargeCurrentMax}, #{item.chargeCurrentAvg}, #{item.dischargeCurrentAvg}, #{item.gpsCog}, #{item.totalChargeEnergy}, #{item.chargeCyclesHistory}, #{item.chargeCapacityHistory}, #{item.dischargeCapacityHistory}, #{item.ntc1}, #{item.ntc2}, #{item.ntc3}, #{item.ntc4}, #{item.trackerCommunicationStatus}, #{item.batteryKind}, #{item.dsoc}, #{item.correctionRate}, #{item.tsoc}, #{item.bsoc}, #{item.fcc}, #{item.actualSoh}, #{item.chargingSop}, #{item.dischargingSop}, #{item.taskMaxDelay1ms}, #{item.taskMaxDelay10ms}, #{item.taskMaxDelay100ms}, #{item.taskMaxDelay500ms}, #{item.taskMaxTime1ms}, #{item.taskMaxTime10ms}, #{item.taskMaxTime100ms}, #{item.taskMaxTime500ms}, #{item.emptyCount} ) </foreach> </insert> 这样写是否正确
09-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果天王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值