C语言分割字符串

C语言分割字符串,第1张

使用strtok函数即可实现分割字符串。

1、strtok函数:
原型:char strtok(char s[], const char delim);
功能:将一个字符串分解为一组字符串,s为要分解的字符串,delim为分隔符字符串;
说明:当strtok函数在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针;
头文件:stringh;
返回值:从字符串s开头开始的一个个被分割的字符串。分割结束时,返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。
2、例程:

#include<stdioh>
#include<stringh>
int main(){
    char input[16]="abc,d,ef,g";//待分解字符串
    char delim=",";//分隔符字符串
    char p=strtok(input,delim);//第一次调用strtok
    while(p!=NULL){//当返回值不为NULL时,继续循环
        printf("%s\n",p);//输出分解的字符串
        p=strtok(NULL,delim);//继续调用strtok,分解剩下的字符串
    }
    return 0;
}

stringh中提供了一个分割字符串得到子串的函数——strtok。

原型:

char strtok(char s[], const char delim);

参数:

s为需要分割的字符串,delim为分隔子串的字符串。

返回值:

从s开头开始的一个个被分割的串。当s中的字符查找到末尾时,返回NULL。如果查找不到delim中的字符时,返回当前strtok的字符串的指针。

注意:

strtok工作原理为,在字符串s中查找字符串delim包含的字符,若找到一个,则将该位置的字符设为'\0',并返回s。每次调用strtok都只能返回1个子串,所以若要多次分割同一字符串,第一次调用strtok时,第一个参数传入要分割的字符串,后续调用则将第一个参数写为NULL。

根据以上原理,strtok会更改原字符串的值,所以如果需要继续使用原字符串,则要提前复制一份。

$code = '词一,词二,词三';
$code = explode(',',$code);
dump($code);
打印出来的应该是
array(2) {
[0] => string(6) "词一"
[1] => string(6) "词二"
[2] => string(6) "词三"}

不知道你想问什么?是说格式化字串吗?还是正则表达式?
格式化常用的:
字串里的占位符
用法:stringForamt("是个","宝宝","好孩子");//得到:宝宝是个好孩子
"yyyy-MM-dd HH:mm:ss"、"yyyy/MM/dd HH:mm:ss" 日期时间格式化,更多请参考 DateTimeFormatInfo 类
用法:DateTimeNowToString("yyyy-MM-dd HH:mm:ss");//得到当前时间且格式化为(示例):2009-2-12 13:38:30
"00"数字格式化,更多请参考 NumberFormatInfo 类
用法:31415926fToString("00");//得到:314
正则表达式常用的:
字符类
说明
[ 字符分组 ]
(正字符分组。) 匹配指定字符分组内的任何字符。
字符分组由串连的一个或多个原义字符、转义符、字符范围或字符类组成。
例如,若要指定所有元音字母,使用 [aeiou] 若要指定所有标点符号和十进制数字符,使用代码 [\p\d]。
[^ 字符分组 ]
(负字符分组。) 匹配不在指定字符分组内的任何字符。
字符分组由串连的一个或多个原义字符、转义符、字符范围或字符类组成。前导符 (^) 是强制的,指示字符分组为负字符分组,而不是正字符分组。
例如,若要指定除元音字母以外的所有字符,使用 [^aeiou] 若要指定除标点符号和十进制数字符以外的所有字符,使用 [^\p\d]。
[ 第一个字符 - 最后一个字符 ]
(字符范围。) 匹配字符范围中的任何字符。
字符范围是一系列连续的字符,定义的方法是:指定系列中的第一个字符,连字符 (-),然后指定系列中的最后一个字符。如果两个字符具有相邻的 Unicode 码位,则这两个字符是连续的。可以串连两个或更多字符范围。
例如,若要指定从“0”至“9”的十进制数范围、从“a”至“f”的小写字母范围,以及从“A”至“F”的大写字母范围,使用 [0-9a-fA-F]。

(句点字符。) 匹配除 \n 以外的任何字符。如果已用 Singleline 选项做过修改,则句点字符可与任何字符匹配。有关更多信息,请参见正则表达式选项。
请注意,正字符分组或负字符分组中的句点字符(方括号内的句点)将被视为原义句点字符,而非字符类。
\p
匹配通过名称(例如 Ll、Nd、Z、IsGreek 和 IsBoxDrawing)指定的 Unicode 通用类别或命名块中的任何字符。
\P
匹配不在名称中指定的 Unicode 通用类别或命名块中的任何字符。
\w
与任何单词字符匹配。等效于 Unicode 通用类别 [\p\p\p\p\p\p\p]。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \w 等效于 [a-zA-Z_0-9]。
\W
与任何非单词字符匹配。等效于 Unicode 通用类别 [^\p\p\p\p\p\p\p]。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \W 等效于 [^a-zA-Z_0-9]。
\s
与任何空白字符匹配。等效于转义符和 Unicode 通用类别 [\f\n\r\t\v\x85\p]。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \s 等效于 [ \f\n\r\t\v]。
\S
与任何非空白字符匹配。等效于转义符和 Unicode 通用类别 [^\f\n\r\t\v\x85\p]。如果通过 ECMAScript 选项指定了符合 ECMAScript 的行为,则 \S 等效于 [^ \f\n\r\t\v]。
\d
与任何十进制数字匹配。对于 Unicode 类别的 ECMAScript 行为,等效于 \p,对于非 Unicode 类别的 ECMAScript 行为,等效于 [0-9]。
\D
与任何非数字字符匹配。对于 Unicode 类别的 ECMAScript 行为,等效于 \P,对于非 Unicode 类别的 ECMAScript 行为,等效于 [^0-9] 。
限定符
说明

指定零个或更多个匹配;例如 \w 或 (abc)。等效于 。
+
指定一个或多个匹配;例如 \w+ 或 (abc)+。等效于 。

指定零个或一个匹配;例如 \w 或 (abc)。等效于 。
指定恰好 n 个匹配;例如 (pizza)。
指定至少 n 个匹配;例如 (abc)。
指定至少 n 个但不多于 m 个匹配。

指定尽可能少地使用重复的第一个匹配(等效于 lazy )。
+
指定尽可能少地使用重复但至少使用一次(等效于 lazy +)。

指定使用零次重复(如有可能)或一次重复 (lazy )。

等效于 (lazy )。

指定尽可能少地使用重复但至少使用 n 次 (lazy )。

指定介于 n 次和 m 次之间、尽可能少地使用重复 (lazy )。

substring讲解:

s=ssubstring(int begin);截取掉s从首字母起长度为begin的字符串,将剩余字符串赋值给s;

s=ssubstring(int begin,int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;

split讲解:

javalangstringsplit
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObjsplit([separator,[limit]])
参数
stringObj 
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator 
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽

略该选项,返回包含整个字符串的单一元素数组。 
limit
可选项。该值用来限制返回数组中的元素个数。

说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解

。separator 不作为任何数组元素的部分返回。

split 的实现直接调用的 matcher 类的 split 的方法。“ ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。

Java代码

public static void main(string[] args) {

string value = "19216812833";

string[] names = valuesplit("\\");

for (int i = 0; i < nameslength; i++) {

systemoutprintln(names[i]);

}}

如果用竖线“|”分隔的话,将出现不可得到的结果,必须改为“\\|”


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10545545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存