ACM---------分割字符串函数split

本文介绍了C/C++中的strtok函数,详细解释了如何使用strtok函数对字符串进行分割,并通过示例展示了如何指定不同的分隔符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<style type="text/css"> <!-- @page {margin:2cm} p {margin-bottom:0.21cm; direction:ltr; color:#000000; text-align:justify; widows:0; orphans:0} p.western {font-family:"Times New Roman",serif; font-size:10pt} p.cjk {font-family:"宋体"; font-size:10pt} p.ctl {font-family:"Times New Roman",serif; font-size:10pt} --> </style>

C/C++中的Split函数

1C/C++中的Split函数是strtok()其函数原型如下:
char * strtok (char * str, const char * delimiters);

函数说明
strtok()
用来将字符串分割成一个个片段。参数
str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL每次调用成功则返回下一个分割后的字符串指针。

返回值
返回下一个分割后的字符串指针,如果已无从分割则返回NULL


示例-1:

#include<stdio.h>
#include <string.h>
int main ()
{
char str[] ="a,b,c,d*e";
const char *split = ",";
char * p;
p = strtok(str,split);
while(p!=NULL) {
printf("%s\n",p);
p = strtok(NULL,split);
}
getchar();
return 0;
}
本例中,实现对字符串'a,b,c,d*e"用逗号(,)来作界定符对字符串进行分割。
输出结果将如下所示:
a
b
c
d*e

因为delimiters支持多个分割符,我们将本示例中的语句行
constchar * split = ",";
改成constchar * split = ",*";//用逗号(,)和星号(*)对字符串进行分割

这样输出结果将如下所示
:
a
b
c
d
e


<think>好的,用户想了解ACM模式的相关信息及其应用场景。首先,我需要回顾一下之前收集到的资料。根据引用[1],ACM模式要求程序员处理完整的输入输出,包括解析输入、处理数据以及格式化输出,而核心代码模式只需关注算法逻辑。这锻炼了全面的代码能力,尤其是在实际比赛中,输入输出的处理很关键。 接下来,应用场景方面,引用[1]提到ACM模式常见于算法竞赛和在线评测平台(如LeetCode的某些题目),而引用[3]则详细列举了在Java中处理ACM模式时常用的API,比如Scanner和集合类的使用。这说明应用场景主要集中在需要全面编程能力的场合,比如竞赛和面试中考察综合能力的时候。 用户可能还关心ACM模式与核心代码模式的区别,以及如何准备。根据引用[1],练习ACM模式需要熟悉输入输出处理,建议去OJ网站练习。此外,引用[3]提供了具体的代码示例,比如使用Scanner读取输入,这可能对用户有帮助。我需要将这些信息整合,用清晰的结构回答,并生成相关问题,比如如何适应ACM模式,或者它的优缺点。 最后,确保回答符合格式要求:使用中文,数学公式正确,引用标识自然添加。同时,要避免使用Markdown,保持口语化的解释,但整体结构要专业。需要检查是否有遗漏的信息,比如是否提到了应用场景的具体例子,以及练习的资源推荐,比如OJ平台。</think>### ACM模式介绍及应用场景 #### 1. ACM模式定义与特点 ACM模式要求程序员**完整处理输入输出**,包括从标准输入读取数据、解析数据格式、处理算法逻辑,最后按格式输出结果。这种模式得名于国际大学生程序设计竞赛(ACM-ICPC),其核心特点是: - **输入输出的自主控制**:需要手动编写代码解析输入(如多组测试数据、复杂分隔符等) - **代码完整性要求高**:需包含`main`函数和完整的程序结构 - **严格的格式规范**:输出结果必须与题目要求的格式完全一致 例如处理多组输入的典型代码结构: ```python import sys for line in sys.stdin: n = int(line.strip()) # 处理逻辑... print(result) ``` #### 2. 与核心代码模式对比 | 维度 | ACM模式 | 核心代码模式 | |--------------|----------------------------------|-------------------------------| | 输入输出 | 需自行处理 | 由测试框架自动处理 | | 代码结构 | 完整程序(包含main函数) | 只需实现指定函数 | | 适用场景 | 算法竞赛/OJ平台 | LeetCode类面试平台 | | 训练重点 | 全流程编码能力 | 算法逻辑实现 | #### 3. 应用场景 1. **算法竞赛**:如ACM-ICPC、CCPC等国际赛事均采用此模式[^1] 2. **在线评测系统**:多数OJ平台(如HDU、POJ)采用ACM模式 3. **企业笔试**:部分公司笔试系统仍沿用ACM模式(如早期华为机考) 4. **教学训练**:高校算法课程常使用OJ平台进行训练 #### 4. 典型应用案例 **场景**:处理多组不定长输入 ```python import sys while True: try: # 读取含空格的整行输入 data = list(map(int, sys.stdin.readline().strip().split())) if not data: break # 处理数据... except: break ``` #### 5. 学习建议 - **输入输出训练**:重点掌握字符串分割、类型转换、异常处理 - **模板积累**:整理常见输入模式(如多测试用例、矩阵输入等) - **平台实践**:推荐在[HDU OJ](http://acm.hdu.edu.cn/)、[POJ](http://poj.org/)等平台练习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值