split函数c语言,(不使用库函数)实现字符串拆分函数strsplit(str1,c,str[])。求C语言代码
split函数c语言,(不使用库函数)实现字符串拆分函数strsplit(str1,c,str[])。求C语言代码详细介绍
本文目录一览: 请问,C语言中,对带分隔符的字符串如何分割?
C/C++中的Split函数是strtok()其函数原型如下:
char
*
strtok
(char
*
str,
const
char
*
delimiters);
函数说明
strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
返回值
返回下一个分割后的字符串指针,如果已无从分割则返回NULL。
示例-1
/*
strtok
example
*/
#include
#include
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支持多个分割符,
我们将本示例中的语句行
const
char
*
split
=
",";
改成
const
char
*
split
=
",*";
//用逗号(,)和星号(*)对字符串进行分割
这样输出结果将如下所示:
a
b
c
d
e
Split()[1]中的[1]是什么意思
split()方法是将指定字符串按某指定的分隔符进行拆分,拆分将会形成一个字符串的数组并返回
如:string str = "aa.bb.cc.dd";
string[] strArray = str.Split('.');
所得到的结果strArray的值为 string[]{"aa","bb","cc","dd"}
其中"aa","bb","cc","dd"即是构成数组strArray的元素
数组中的每元素都各自对应一个索引值,就好比在数据库的表中每行数据纪录都拥有自己的索引ID一样
数组元素的索引值是从0开始计数的,也就是说第一个元素的索引值是0,往后依次加1
我们可以用数组的索引值来取对应位置的数组元素的值,比如说我们要取数组的第一个元素 “aa”,那么我们就可以这样写 :
string aa = strArray[0];
这里split('.')[1] 是一种缩写形式,把它拆开来看实际就是
先用split('.')方法将字符串以"."开割形成一个字符串数组,然后再通过索引[1]取出所得数组中的第二个元素的值
id=sr.ReadLine().Split('=')[1]
的意思是把字符串sr用“=”分割成数组,比如:sr的字符串是1=2,哪么sr.ReadLine().Split('=')={1,2};所以sr.ReadLine().Split('=')[1] 的意思就是取用“=”分割后数组的第二个元素,即元素“2”。
就是说,把读出的一行数据中,"="后面的数据取出来。
比如说文件中有如下一行
FileId=test
那么,上面那句的结果就是id变量的值变成了test
str.split(/\[|,|\]/)的意思是以正则表达式[|,|]来分割str字符串。
比如定义一个str为:
var str = "aaa[|,|]bbbb[|,|]cccccc";
那么分割后的结果就是:aaa bbbb cccccc
比如字符串 1.222.3333
split('.')[1] 就是按 . 分割的第二个字符串
含义:先用split('.')方法将字符串以"."开割形成一个字符串数组,然后再通过索引[1]取出所得数组中的第二个元素的值。
思路解析:
split()方法是将指定字符串按某指定的分隔符进行拆分,拆分将会形成一个字符串的数组并返回。
数组中的每元素都各自对应一个索引值,就好比在数据库的表中每行数据纪录都拥有自己的索引ID一样数组元素的索引值是从0开始计数的,也就是说第一个元素的索引值是0,往后依次加1。
我们可以用数组的索引值来取对应位置的数组元素的值,比如说我们要取数组的第一个“aa”,那么我们就可以这样写 :string aa = strArray[0]。
扩展资料:
基本组成:
数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
常量与变量
常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。 [18]
指针
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
参考资料来源:百度百科--c语言
参考资料来源:百度百科--代码
C语言中字符切割函数split的实现
c语言中 有切割字符串的函数啊!
strtok函数(const char *str, const char *ch)
第一个是字符串,第二个是以那个字符做切割。
例子:
#include
#include
int main(void)
{
char s[] = "123-sldkf-123ls-343434-dfjdlkfj-dflcmvn";
char *delim = "-";
char *p;
printf("%s ", strtok(s, delim));
while((p = strtok(NULL, delim))
printf("%s ", p);
printf("\n");
return 0;
}
char s[] = "dlkjf-sdlkfjsdf\lsdkljfl'sldkjf\sdkfjsdlf\lskdjfls";
如果想用-和\两个符号切割的话
char *delim = "-\";
这样就可以了
找了很久都没找到个靠谱的split函数。
我还是自己写一个分享在这里吧。英语不好请见谅:
/** split the string by delimiter. need to use "free" method to release the each of string in array. @param targetString splited String @param delimiter the delimiter to split the string @param length the array`s length of result @return array of splited string(need release manually) */char** split(const char * const targetString, const char * const delimiter,int * const length){ *length=0; char ** resultString=NULL; char inputString[strlen(targetString)]; strcpy(inputString,targetString); char inputDelimiter[strlen(delimiter)]; strcpy(inputDelimiter,delimiter); char * splitedString = strtok(inputString, inputDelimiter); while (splitedString){ (*length)++; char * resultChar = NULL; resultChar=malloc(strlen(splitedString)); strcpy(resultChar,splitedString); resultString=realloc(resultString,(*length) * sizeof(char *)); resultString[(*length)-1] =resultChar; splitedString=strtok(NULL, delimiter); } return resultString;}int main(int argc, const char * argv[]) { char * ch1 ="a\tb\tc\nA\tB\tC\n"; char * ch2 ="\n"; char * ch3 ="\t"; int length1=0; int length2=0; char ** result1 = split(ch1, ch2, &length1); for (int i=0;i
<length1;i++){ printf("%s\n",result[i]); char ** result2="split(result1[i]," ch3, &length2); for (int j="0;j<length2;j++){" printf("%s--",result2[j]); free(result2[j]); release resource } printf("\n"); free(result1[i]); printf("done\n"); return 0;}
#include
#include
// 将str字符以spl分割,存于dst中,并返回子字符串数量int split(char dst[][80], char* str, const char* spl){ int n = 0; char *result = NULL; result = strtok(str, spl); while( result != NULL ) { strcpy(dst[n++], result); result = strtok(NULL, spl); } return n;}int main(){ char str[] = "what is you name?"; char dst[10][80]; int cnt = split(dst, str, " "); for (int i = 0; i < cnt; i++) puts(dst[i]); return 0;}
C语言split分割字符串。
这个是用c++写的不过和c的原理也差不多我运行过了,有什么问题再问吧,c不知道能否运行,不过现在c/c++程序设计试验系统通常都有嵌套c++,你打开c界面时单击vc6.0创建一个项目运行就可以了。
#include
using namespace std;
char** split(char p[],char c,int k)
{
int i,m,j;
char **q;
q=(char**)new char*[k];
for(i=0;i
<k;i++)
q[i]=(char*)new char*[20];
i=0;
j=0;
m=0;
while(p[i])
{
if(p[i]!=',')
{
q[j][m++]=p[i++];
}
else
{
q[j][m]='\0';
j++;
m=0;
i++;
}
}
q[k-1][m]='\0';
for(i=0;i<4;i++)
{
cout<
<q[i];
cout<
<endl;
}
return q;
}
void main()
{ int k;
char p[]="ab,cde,efgh,ghi32";
char c=',';
int i=0,j=0,m=0;
while(p[i])
{
if(p[i]==',')
j++;
i++;
}
j=j+1;//接受到底有多少个单词在分割后通过逗号去判断
k=j;
char**q=split(p,c,k);
printf("\n");
for(i=0;i<4;i++)
{
cout<
<q[i];
cout<
<endl;
}
}
public void Fun(Object response) {
String msg = response.toString();
String ary[] = msg.split(",");
if (ary != null && ary.length==数组长度) {
num_1 = ary[0];
num_2 = ary[1];
……
}
}
//以下解法的前提是,先把所有环变成1.无环路,2.一个环没有扣住3个及以上的其他环void main(){int array[16] = {0};//init, array[1] = xxx;根据输入初始化数组,如1-2,则,array[1] = 2,...int HashArray[16] = {0};int head, tail;int head_tmp, tail_tmp;getNextList(array, HashArray, head, tail); while(getNextList(array, HashArray, head_tmp, tail_tmp)){ array[tail] = head_tmp; tail = tail_tmp;}//此时的array数组里面应该是一条链了} getNextList(int array[], int Hasharray, int & head, int & tail){ int head_tmp = 1; while(Hasharray[head_tmp++] != 0); if (head_tmp == 16) return false; else { head = tail = head_tmp - 1; while(array[tail] != 0) { Hasharray[tail] = 1; tail++; } Hasharray[tail] = 1; return true; }}
</endl;
</q[i];
</endl;
</q[i];
</k;i++)
C语言中有没有类似java的split方法的函数
没有 因为 C语言中没有java中string那个类型,而是使用 char [] 数组表示的。标准C中是不存在split类似方法的。
char*strtok(chars[],constchar*delim);分解字符串为
有的,在string库文件中有char *strtok( char *str1, const char *str2 );应用方法如下,
#include
#include
//程序功能用"&"作为分隔符,结果输出“今天是”、“2015年”、“6月”、“8日”、“星期一”
int main()
{
char str[] = "今天是&2015年&6月&8日&星期一";
char str0[] = "&";
char *result = NULL;
result = strtok( str, str0);
while( result != NULL ) {
printf( "\"%s\"\n", result );
result = strtok( NULL, str0 );
}
return 0;
}
char *strtok( char *str1, const char *str2 );函数返回字符串str1中紧靠着“分隔符str2”的部分的指针,字符串str2作为标记分隔符。如果标记分隔符没有找到,函数返回NULL。
(不使用库函数)实现字符串拆分函数strsplit(str1,c,str[])。求C语言代码
没明白具体含义?
1、哪个是源串,哪个是目标串?
2、什么样的拆分需求?假定str1是源串,是将str1中含有str[]的串两边的内容分别存放,还是返回str[]前后的一部分?
#include?"stdafx.h"
#include?
char?a[10]="abcdefg";
int?main(int?argc,?char*?argv[])
{
?void?strsplit(char*,int,char*);
?char?*str1=a;
?char?*str2=new?char;
?*str2?=NULL;
?int?c=3;
?printf("源字符串str1=%s
",str1);
?int?a?=?strlen(str1);
?strsplit(str1,c,str2);
?printf("str1=%s
str2=%s
",str1,str2);
?str2?=NULL;
?delete?[]str2;
?return?0;
}
void?strsplit(char*?str1,int?c,char*?str2)
{
?char?*tmp=str1+c;
?for?(int?i=c;i
<strlen(str1);i++)
</strlen(str1);i++)
?{?
?
*str2?=?*tmp;
?
*str2++;
?
*tmp++;
?}
?*str2++='';
?str1+=c;
?*str1?=?'';
}
?
?
?
#include "stdafx.h"
#include
char a[10]="abcdefg";
int main(int argc, char* argv[])
{
void strsplit(char*,int,char*);
char *str1=a;
char *str2=new char;
*str2 =NULL;
int c=3;
printf("源字符串str1=%s\n",str1);
int a = strlen(str1);
strsplit(str1,c,str2);
printf("str1=%s\nstr2=%s\n",str1,str2);
str2 =NULL;
delete []str2;
return 0;
}
void strsplit(char* str1,int c,char* str2)
{
char *tmp=str1+c;
for (int i=c;i
<strlen(str1);i++)
{
*str2 = *tmp;
*str2++;
*tmp++;
}
*str2++='\0';
str1+=c;
*str1 = '\0';
}
问个c语言关于Split()的问题
这个是用split()函数将“this is a test”这个句话以' '空格来截断,存在数组mywords中,然后输出的
C语言编程问题,初学者,不太会,谢谢啦
#include "stdio.h"
void f(int x[],int n)
{
int max=x[0],min=x[0],i;
int max_locate=0,min_locate=0;
for(i=1;i
<n;i++)
{
if (max < x[i])
{
max = x[i];
max_locate=i;
}
if(min > x[i])
{
min = x[i];
min_locate=i;
}
}
x[max_locate]=x[n-1];
x[n-1]=max;
x[min_locate]=x[0];
x[0]=min;
}
int main()
{
int x[10] = {},i;
printf("输入10个数:");
for(i=0;i<10;i++)
scanf("%d",&x[i]);
f(x,10);
printf("对换后:");
for(i=0;i<10;i++)
printf("%d ",x[i]);
printf("\n");
return 0;
}
你可以按照以下方式编写自定义函数f和主函数:
```python
def f(x):
min_index = x.index(min(x)) # 找到最小值的索引
x[0], x[min_index] = x[min_index], x[0] # 将最小值与第一个数对换
max_index = x.index(max(x)) # 找到最大值的索引
x[-1], x[max_index] = x[max_index], x[-1] # 将最大值与最后一个数对换
def main():
# 输入数组
nums = input("请输入以空格分隔的数字: ").split()
nums = [int(num) for num in nums]
# 调用自定义函数f
f(nums)
# 输出结果
print("交换后的数组:", nums)
# 调用主函数
main()
```
在主函数中,首先输入一组以空格分隔的数字,然后将其转换为整数类型的列表。接下来,调用自定义函数f,传入这个列表作为参数。在自定义函数f中,通过找到最小值和最大值的索引,并与第一个数和最后一个数进行对换。最后,在主函数中输出交换后的数组结果。
注意:这个函数假设输入的n个数互不相同。若输入包含相同的数,则可能出现重复的数被交换的情况。
#include
int f(int *a,int n)
{
int max,min;
max=min=0;
for(int i=0;i
<n;i++)
if(a[i]>a[max])
max=i;
else if(a[i]
<a[min])
min=i;
int t;
t=a[max];
a[max]=a[n-1];
a[n-1]=t;
t=a[min];
a[min]=a[0];
a[0]=t;
}
int main()
{
int a[111],n=0;
do{
scanf("%d",&a[n++]);
}while(getchar()!='\n');//回车结束输入;
f(a,n);//调用函数
for(int i=0;i
<n;i++)
printf("%d ",a[i]);
return 0;
}
</n;i++)
</a[min])
</n;i++)
</n;i++)
C语言读取未知长度的矩阵并存入二维数组
可以先定义个长度不定的数组,然后从测试文件中读取,并判断是否到达文件为(EOF),没读完一行移到下一行读取,具体函数C语言标准库里面都有
//---------------------------------------------------------------------------
#include
#include
#include
#include
char *getline(FILE *fp) /*从文件读取一行内容,以字符形式保存*/
{
char c,*cl=NULL;
int n=0;
while ((c=fgetc(fp))!='\n'&&c!=EOF)
{
cl=cl?realloc(cl,sizeof(char)*(n+++1)):malloc(sizeof(char)*++n);
cl[n-1]=c;
}
if (cl) {
cl=realloc(cl,sizeof(char)*++n);
cl[n-1]=0;
}
return cl;
}
int *split(char *line) /*从字符数组line中提取出整数,保存到整型数组中并返回*/
{
int *rt=malloc(sizeof(int));
int i,l,num;
rt[0]=0;
for (i = 0; *line; i++) {
rt=realloc(rt,sizeof(int)*(++rt[0]+1));
sscanf(line,"%1d",&num);
rt[rt[0]]=num;
line+=(int)floor(log10(num))+1;
while (isspace(*line))
++line;
}
return rt;
}
int main(void)
{
FILE *fp=fopen("c:\\d.txt","r");
char *cl=NULL;
int **ma=NULL; /*二维数组指针,指向从文件读取的矩阵*/
int i,j,n=0; /*n是矩阵的行数*/
while ((cl=getline(fp))!=NULL)/*这个过程用于从文件读取矩阵并保存到动态分配的二维数组中*/
{
ma=ma?realloc(ma,sizeof(int *)*(n+++1)):malloc(sizeof(int *)*++n);
ma[n-1]=split(cl);
}
fclose(fp);
for (i = 0; i
<n; i++) { *输出矩阵*
for (j=1; j<=ma[i][0]; j++) { /*ma[i][0]保存了该行的整数个数*/
printf("%d\t",ma[i][j]);
}
putchar('\n');
}
return 0;
}
//---------------------------------------------------------------------------
C语言字符串拆分
使用strstr函数嘛(以下代码测试通过)
功能:在一个字符串中查找特定的字符串,如果查找到会返回查找到字符串的位置,失败返回NULL
分析:搜索字符串"bizbox_userlang=",成功后取出'='后和‘=’后第1个';'之间的所有字符
#include
int main(int argc, char* argv[])
{
char buf1[]="bizbox_username=admin; bizbox_userpass=c1501f6698e058e47d3f81f723c2b9f2; bizstore_note=; bizbox_userlang=zh; csd=33; cod=29.30; business_note=null";
char *buf2="bizbox_userlang=";
char *ptr;
char txt[100];
ptr=strstr(buf1,buf2); //成功返回的位置是"bizbox_userlang=zh; csd=33...."
if( ptr==NULL)
{
printf("没有找到该内容\n");
return -1;
</strlen(str1);i++)