DNA图谱 / 问答 / 问答详情

C语言编程!帮帮忙!

2023-07-10 01:15:05
共3条回复
gitcloud

读写文件,教科书上有。都写出来是你做作业还是我做作业?

还有别乱用叹号,这不是问人的态度

只给出关键代码。请自行阅读并组合。

0.读入文件

1.分割文件成为token(关键点)

2.统计token数目

3.输出统计信息

1.分割token用C标准库中的strtok()函数完成。

strtok()的原型为:

char *strtok( char *strToken, const char *strDelimit );

strToken为目标字符串,strDelimit为分割符集合。返回值是一个分割好的Token。

例子程序:

#include <string.h>

#include <stdio.h>

char string[] = "A string of ,,tokens and some more tokens"; // 目标字符串

char seps[] = " , "; // 分割符集

char *token;

void main( void )

{

printf( "%s Tokens: ", string );

/* 将目标字符串和分割符集给入strtok,返回第一个token */

token = strtok( string, seps );

while( token != NULL )

{

/* 打印一个token */

printf( " %s ", token );

/* 获取下一个token */

token = strtok( NULL, seps );

}

}

输出结果如下:

moose@iBookG4:~/Projects/svn_repo/trunk/data_struct/glibc$ ./a.out

A string of ,,tokens

and some more tokens

Tokens:

A

string

of

tokens

and

some

more

tokens

可见所有单词都被分割出来了。

另外,ANSI还可以用wcstok()对汉字(宽字符集)进行分割。

再另,如果你的作业考查点在实现一个自己的strtok(),请自行分析之。

其他几个功能都是比较基本的功能。不再赘述。请自行思考。

给出一个我做的样本,很多情况没有考虑(不用文件输入/输出,不考虑内存消耗,不考虑token数量等等),仅作参考:

#include <string.h>

#include <stdio.h>

char string[] = "DESCRIPTION For strtok(): [CX] [Option Start] The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional. This volume of IEEE Std 1003.1-2001 defers to the ISO C standard. [Option End] A sequence of calls to strtok() breaks the string pointed to by s1 into a sequence of tokens, each of which is delimited by a byte from the string pointed to by s2. The first call in the sequence has s1 as its first argument, and is followed by calls with a null pointer as their first argument. The separator string pointed to by s2 may be different from call to call. The first call in the sequence searches the string pointed to by s1 for the first byte that is not contained in the current separator string pointed to by s2. If no such byte is found, then there are no tokens in the string pointed to by s1 and strtok() shall return a null pointer. If such a byte is found, it is the start of the first token. The strtok() function then searches from there for a byte that is contained in the current separator string. If no such byte is found, the current token extends to the end of the string pointed to by s1, and subsequent searches for a token shall return a null pointer. If such a byte is found, it is overwritten by a null byte, which terminates the current token. The strtok() function saves a pointer to the following byte, from which the next search for a token shall start. Each subsequent call, with a null pointer as the value of the first argument, starts searching from the saved pointer and behaves as described above.";

char seps[] = " ,.[]: ";

char *token;

struct _token_stat{

char token[64];

int stat;

};

// 至多允许出现1024个单词

struct _token_stat gTokens[1024];

void main( void )

{

int i;

for (i = 0; i < 1024; i++)

{

gTokens[i].token[0]="";

gTokens[i].stat=0;

}

printf( "%s Tokens: ", string );

/* Establish string and get the first token: */

token = strtok( string, seps );

while( token != NULL )

{

// 统计信息

{

int i;

for (i=0;i<1024;i++)

{

if ( strlen(gTokens[i].token)==0)

{

strcpy(gTokens[i].token, token);

gTokens[i].stat++;

break;

}

else

{

if ( strcmp(gTokens[i].token,token)==0)

{

gTokens[i].stat++;

break;

}

}

}

}

/* Get next token: */

token = strtok( NULL, seps );

}

for (i=0;i<1024;i++)

{

if (strlen(gTokens[i].token)>0)

{

printf("token=%s, stat=%d ", gTokens[i].token, gTokens[i].stat);

}

}

}

输出结果:

moose@iBookG4:~/Projects/svn_repo/trunk/data_struct/glibc$ ./a.out

DESCRIPTION

For strtok(): [CX] [Option Start] The functionality described on this reference page is aligned with the ISO C standard. Any conflict between the requirements described here and the ISO C standard is unintentional. This volume of IEEE Std 1003.1-2001 defers to the ISO C standard. [Option End]

A sequence of calls to strtok() breaks the string pointed to by s1 into a sequence of tokens, each of which is delimited by a byte from the string pointed to by s2. The first call in the sequence has s1 as its first argument, and is followed by calls with a null pointer as their first argument. The separator string pointed to by s2 may be different from call to call.

The first call in the sequence searches the string pointed to by s1 for the first byte that is not contained in the current separator string pointed to by s2. If no such byte is found, then there are no tokens in the string pointed to by s1 and strtok() shall return a null pointer. If such a byte is found, it is the start of the first token.

The strtok() function then searches from there for a byte that is contained in the current separator string. If no such byte is found, the current token extends to the end of the string pointed to by s1, and subsequent searches for a token shall return a null pointer. If such a byte is found, it is overwritten by a null byte, which terminates the current token. The strtok() function saves a pointer to the following byte, from which the next search for a token shall start.

Each subsequent call, with a null pointer as the value of the first argument, starts searching from the saved pointer and behaves as described above.

Tokens:

token=DESCRIPTION, stat=1

token=For, stat=1

token=strtok(), stat=5

token=CX, stat=1

token=Option, stat=2

token=Start, stat=1

token=The, stat=6

token=functionality, stat=1

token=described, stat=3

token=on, stat=1

token=this, stat=1

token=reference, stat=1

token=page, stat=1

token=is, stat=12

token=aligned, stat=1

token=with, stat=3

token=the, stat=24

token=ISO, stat=3

token=C, stat=3

token=standard, stat=3

token=Any, stat=1

token=conflict, stat=1

token=between, stat=1

token=requirements, stat=1

token=here, stat=1

token=and, stat=5

token=unintentional, stat=1

token=This, stat=1

token=volume, stat=1

token=of, stat=7

token=IEEE, stat=1

token=Std, stat=1

token=1003, stat=1

token=1-2001, stat=1

token=defers, stat=1

token=to, stat=12

token=End, stat=1

token=A, stat=1

token=sequence, stat=4

token=calls, stat=2

token=breaks, stat=1

token=string, stat=8

token=pointed, stat=7

token=by, stat=10

token=s1, stat=5

token=into, stat=1

token=a, stat=13

token=tokens, stat=2

token=each, stat=1

token=which, stat=3

token=delimited, stat=1

token=byte, stat=9

token=from, stat=5

token=s2, stat=3

token=first, stat=7

token=call, stat=5

token=in, stat=5

token=has, stat=1

token=as, stat=4

token=its, stat=1

token=argument, stat=3

token=followed, stat=1

token=null, stat=5

token=pointer, stat=6

token=their, stat=1

token=separator, stat=3

token=may, stat=1

token=be, stat=1

token=different, stat=1

token=searches, stat=3

token=for, stat=4

token=that, stat=2

token=not, stat=1

token=contained, stat=2

token=current, stat=4

token=If, stat=4

token=no, stat=3

token=such, stat=4

token=found, stat=4

token=then, stat=2

token=there, stat=2

token=are, stat=1

token=shall, stat=3

token=return, stat=2

token=it, stat=2

token=start, stat=2

token=token, stat=5

token=function, stat=2

token=extends, stat=1

token=end, stat=1

token=subsequent, stat=2

token=overwritten, stat=1

token=terminates, stat=1

token=saves, stat=1

token=following, stat=1

token=next, stat=1

token=search, stat=1

token=Each, stat=1

token=value, stat=1

token=starts, stat=1

token=searching, stat=1

token=saved, stat=1

token=behaves, stat=1

token=above, stat=1

安徽路人假

记得以前有过这麽一个面试题,真要做好挺复杂的.需要考虑文章过大引起内存不足的问题吗?

余辉

1、输入1000个整数,用选择法将它们从大到小排序输出。

#include<stdio.h>

#define N 1000

void main()

{

int a[N],i,j,temp;

for(i=0;i<N;i++) scanf("%d",&a[i]);

for(i=0;i<N;i++) {

for(j=i+1;j<N;j++)

if(a[j]>a[i])

printf("%6d",a[i]);

}

getchar();

}

2、输入正整数n、正实数x后,计算x的n平方的值并输出。要求将计算x的n平方的运算写成函数mypow(x,n),函数返回值的类型为double。

#include<stdio.h>

double mypow(float x,int n){

int i=0;

double k=1;

while(i<n)

return k;

}

void main()

{

int i;

float j;

scanf("%d%f",&i,&j);

printf("%f",mypow(i,j));

getchar();

}

3、输入浮点数x,计算并输出下列分段函数sign(x)的值,y=sign(x)={

-1 x<0

0 x=0

1 x>0

#include<stdio.h>

void main()

{

int i=0;

float j;

scanf("%f",&j);

if(j<0) i=-1;

else if(j>0) i=1;

printf("%d ",i);

getchar();

}

4、输入100个正整数,求所有偶数之和。

#include<stdio.h>

#define N 100

void main()

{

int i,j=0,k=0;

for(i=0;i<N;i++){

scanf("%d",&j);

if(j%2==0) k+=j;

}

printf("%d ",k);

}

相关推荐

strtok函数的用法详解

C 库函数 - strtok() 描述 C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。 声明 下面是 strtok() 函数的声明。 char *strtok(char *str, const char *delim)参数 str -- 要被分解成一组小字符串的字符串。 delim -- 包含分隔符的 C 字符串。 返回值 该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。 实例 下面的实例演示了 strtok() 函数的用法。 实例 #include #include int main () { char str[80] = “This is - www.runoob.com - website”; const char s[2] = “-”; char *token; /* 获取第一个子字符串 */ token = strtok(str, s); /* 继续获取其他的子字符串 */ while( token != NULL ) { printf( “%s ”, token ); token = strtok(NULL, s); } return(0); }让我们编译并运行上面的程序,这将产生以下结果: This is www.runoob.com website推荐:《C语言教程》
2023-07-09 22:39:191

c++里面,函数strtok怎么用?

  strtok:  分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。  功能:  分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。  例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。  函数使用:  strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。  c  #include<string.h>  #include<stdio.h>  int main(void)  {  char input[16]="abc,d";  char*p;  /*strtok places a NULL terminator  infront of the token,if found*/  p=strtok(input,",");  if(p)  printf("%s ",p);  /*Asecond call to strtok using a NULL  as the first parameter returns a pointer  to the character following the token*/  p=strtok(NULL,",");  if(p)  printf("%s ",p);  return0;  }    c++    #include<iostream>  #include<cstring>  using namespace std;  int main()  {  char sentence[]="This is a sentence with 7 tokens";  cout << "The string to be tokenized is: " << sentence << " The tokens are: ";  char *tokenPtr=strtok(sentence,"");  while(tokenPtr!=NULL) {  cout<<tokenPtr<<" ";  tokenPtr=strtok(NULL,"");  }  //cout << "After strtok,sentence=" << tokenPtr<<endl;return0;  }    函数第一次调用需设置两个参数。第一次分割的结果,返回串中第一个 "," 之前的字符串,也就是上面的程序第一次输出abc。  第二次调用该函数strtok(NULL,","),第一个参数设置为NULL。结果返回分割依据后面的字串,即第二次输出d。  strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置  线程安全的函数叫strtok_r,ca  运用strtok来判断ip或者mac的时候务必要先用其他的方法判断"."或":"的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key  其他相关信息  下面的说明摘自于最新的Linux内核2.6.29,说明了这个函数已经不再使用,由速度更快的strsep()代替  /** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found  * as inline code in <asm-xx/string.h>   * These are buggy as well..   * * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de>   * - Added strsep() which will replace strtok() soon (because strsep() is   * reentrant and should be faster). Use only strsep() in new code, please.   ** * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,   * Matthew Hawkins <matt@mh.dropbear.id.au>   * - Kissed strtok() goodbye  */
2023-07-09 22:39:264

C++ strtok函数

调用方式 : char *strtok(char *str1, char *str2);说明 : strtok()函数的原型在string.h中功能说明:函数strtok()返回字符串str1中指向一个由str2所指定的字符或者字符串的分隔符的指 针,当没有要返回的分隔符时,就返回一个空指针。函数strtok()实际上修改了有str1指向的字符串。每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,函数用这种方法来连续查找该字符串。例子:#include <string.h>#include <stdio.h>int main(){ char *p; char str[100]="This is a test ,and you can use it"; p = strtok(str," "); // 注意,此时得到的 p为指向字符串:"This",即在第一个分隔 符前面的字符串,即每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,所以此时NULL指针指向后面的字符串:"is a test ,and you can use it"。 printf("%s ",p); // 此时显示:This do { p = strtok(NULL, ","); // NULL 即为上面返回的指针,即字符串: // "is a test ,and you can use it"。 if(p) printf("|%s",p); }while(p); system("pause"); return 0;}
2023-07-09 22:39:331

C语言中strtok用法

  strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。  strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置  线程安全的函数叫strtok_r,ca。  运用strtok来判断ip或者mac的时候务必要先用其他的方法判断"."或":"的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。  函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。  后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。  如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
2023-07-09 22:39:473

关于c语言字符串中切割函数strtok的用法

strtok()函数并不像你想的那样可以一次切割字串。需要多次循环,第二次时需要用 p = strtok(NULL, " "); 这样的 形式。void main() { char test1[] = "Hello C World"; char *p; p = strtok(test1, " "); while(p) { printf("%s ", p); p = strtok(NULL, " "); } return 0; }运行结果:HelloCWorld
2023-07-09 22:39:544

CC++ strtok()函数的使用及字符串处理

strtok = find token in string.它被设计用于词法分析的前期,token分离的阶段。你的需求需要一点简单的语法结构的嵌入,所以不适合使用这个函数。你有几个选择:1、编写你自己的语法(DSL)解释器。2、使用某个支持正则表达式匹配的函数库。3、仅处理这种特别的字符串,就这么机械地匹配吧。从表述上看,各方案的优劣你也是很容易想清楚的,这里就不详细说了。
2023-07-09 22:40:011

strtok((char *)NULL, "=" ) 什么意思 C语言

原型:char *strtok(char *s, char *delim);功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL("")来替换,直到找遍整个字符串。 返回指向下一个标记串。当没有标记串时则返回空字符NULL。
2023-07-09 22:40:094

C语言字符串处理函数strtok

#include <string.h> char *strtok( char *str1, const char *str2 ); 功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是作为标记的分隔符。如果分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1 指向作为标记的分隔符。之后所以的调用str1 都应为NULL。例如: char str[] = "now # is the time for all # good men to come to the # aid of their country"; char delims[] = "#"; char *result = NULL; result = strtok( str, delims ); while( result != NULL ) { printf( "result is "%s" ", result ); result = strtok( NULL, delims ); } 以上代码的运行结果是: result is "now " result is " is the time for all " result is " good men to come to the " result is " aid of their country" 相关主题:
2023-07-09 22:40:151

[C++]当分割符为多个空格时,如何使用strtok函数将字符串分割?

strtok 函数可以定义多个分隔符,“多个”指几个品种,例如空白与逗号分号:strtok(code, " ,;"); 即空白是分隔符,逗号是分隔符,分号也是分隔符,不是说“空白逗号分号”3个符号组合为一个分隔符。所以strtok 函数,你写了3个空白,实际上定义的分隔符是1个空白。分割符为多个空格时你可以自己写函数,用循环语句一个字符一个字符地检查,连续遇到3个空白,把第3个空白换成逗号。然后用strtok(code, ","); 处里即可。
2023-07-09 22:40:221

C语言 字符串处理函数strtok第二次及以后的调用中第一个参数要用NULL的原因是什么? 能不能解释下原理?

编程中的NULL一.NULL字符  在ASCII码的第一个字符是NULL,它的数值是0,占用1字节;C语言把它作为字符串的最后一个字符,以表示字符串到此结束.""二.NULL指针  在C语言的头文件stddef.h中,NULL的定义如下:   #ifndef NULL   #ifdef __cplusplus   #define NULL 0   #else   #define NULL ((void *)0)   #endif   #endif   #interface NULL 0   可见,NULL指针是一个无类型指针,并且值为0。一个指针,拥有2个属性--地址值和指针类型。两者的作用是:1,地址值标识变量的首地址(32位系统下指针的地址值占4字节);2,指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的;等等)。   NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。这样,指针就无法再进行任何数据访问了。编程工作中有一类比较容易犯的错误--指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。   前面说到“NULL指针无法再进行任何数据访问”,其实是视编译器功能而定的。0位置指向的是程序起始,对于不同的编译器,NULL指针的操作结果是不同的:有些是不准读写,有些是只读,甚至读写都允许。编译器是人定的。引用网友win_hate在话题“关于NULL的不严谨”中的话来说:“如果说有谁不严谨了,那必定是读取0位置的程序员,而不是C。C的设计哲学之一是:‘程序员知道自己在干什么--没有安全带"”。三.数据库中的NULL  Null在数据库中表示 不知道的数据,主要有3种意思:   1)知道数据存在,但不知道具体值.   2)不知道数据是否存在.   3)数据不存在.四.NULL与0的疑惑  NULL与0有着扯不断理还乱的关系,其实不那么高深。0本身有着一些原生的特性诸如:起始,没有,正负的分界线,0/1中的0还可以表示否定。NULL正需要这些特性中的一部分。 我们只需要清楚NULL的本质,并在合理的地方才加以利用而非滥用。譬如我想做一个比较某个整数i是否为0,难道写成i==NULL会比i==0更酷一点吗?五.matlab中的函数  函数null用来求解零空间,即满足方程组A*X=0的解空间。实际上是求出解空间的一组解(基础解系)。   语法:z=null(A) %z的列向量为方程组的正交规范基,满足z‘ x z=I。   z=null(A,"r") %z的列向量是方程A*X=0的有理基。
2023-07-09 22:40:402

C语言从右到左strtok解析字符串

最近正好看到字符串处理函数部分,所以答一下,顺便练习。思路是使用字符串数组存储分割后的字符串,知道数组大小,就可以获取最后一个 / 之前的字符串(即倒数第二个数组元素)。C语言中没有string这个类型,要实现字符串数组可以考虑利用指针数组(其实质就是二维字符数组)。下面是一个示例代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define LEN 30 //指针数组的大小int main(void){ char str[] = "ab/cds/1231/csdf/ae/qdsfa"; char *token = NULL, *p[LEN]; int i = 0; p[i] = strtok(str, "/"); while ((token = strtok(NULL, "/")) != NULL) p[++i] = token; printf("第一个字符串: %s 第二个字符串: %s 倒数第二个字符串: %s ", p[0], p[1], p[--i]); return 0;}
2023-07-09 22:40:461

C语言strtok函数分割含有空值的字符串

自己写这个函数 ,把自己的需求写进去.
2023-07-09 22:40:531

c语言关于strtok的运用错误

strtok函数会修改s的内容的。而你的s是一个指针,指向的地址很有可能是一个常量,或者禁止修改的字符串(比如:命令行参数)。你可以复制一个s,用复制后的s进行分割。char s1[100];strcpy(s1, s);char *t = strtok(s1,",");while(t!=NULL){ printf("%s ", t);t=strtok(NULL,",");}
2023-07-09 22:41:001

C++的函数strtok()中的NULL是什么意思?

在MSDN中查到它的用法,如下:// crt_strtok.c// compile with: /W3// In this program, a loop uses strtok// to print all the tokens (separated by commas// or blanks) in the string named "string".//#include <string.h>#include <stdio.h>char string[] = "A string/tof ,,tokens/nand some more tokens";char seps[] = " ,/t/n";char *token;int main( void ){ printf( "Tokens:/n" ); // Establish string and get the first token: token = strtok( string, seps ); // C4996 // Note: strtok is deprecated; consider using strtok_s instead while( token != NULL ) { // While there are tokens in "string" printf( " %s/n", token ); // Get next token: token = strtok( NULL, seps ); // C4996 }} 输出结果:Tokens: A string of tokens and some more tokens 这个函数的用途是把一个字符串按照seps中指定的符号进行分割,就如同perl中的split()函数。但是,为什么strtok(NULL,seps)中的第一个参数是NULL呢?太奇怪了。
2023-07-09 22:41:071

strtok截取字符

我刚才运行了一下,程序很崩溃,char *tmp = "a b cd e"; // 运行时出现,崩溃的错误,应该是 char tmp[] = "a b cd e" 吧; // 理由暂时不解释;不清楚你是不是懂strtok 的用法?:tp = strtok(tmp, " "); // 第一次调用,函数找到空格的位置,返回,并将原来的空格位置替换成""; // 这里有替换,而 "a b cd e" ,是不可写的,上面的问题,就是这;tp = strtok(NULL, " "); //下一次如果第一个参数是NULL,那么,接着上一次分割位置的下一个位 //置继续分割;如你所说,最后只剩一下"e"时,用" ", "", "f", "g" ,等等,他们结果都一样,都是得到"e",但是,你如果用"e" 去分割,就得到"" 了、所以,不是说,最后一次,随便什么字符串都可以;应该说明的差不多了~~
2023-07-09 22:41:142

c的strtok用法,result = strtok( NULL, delims )理解不了啊

首次调用result = strtok( str, delims );时,内部有个static char *result指针指向了str运行后result指向了now后的#之后的循环result = strtok( NULL, delims );可以看成if 参数==NULL 仍然使用上次的#位置(存在静态变量中)开始继续找,直到找到下一个分隔符#。反复以NULL做参数,找到输出所有的#
2023-07-09 22:41:223

strtok_r的介绍

strtok_r()函数用于分割字符串。strtok_r是linux平台下的strtok函数的线程安全版。windows的string.h中并不包含它。
2023-07-09 22:41:281

c语言字符串清空函数

字符串函数<string.h>在头文件<string.h>中定义了两组字符串函数。第一组函数的名字以str开头;第二组函数的名字以mem开头。只有函数memmove对重叠对象间的拷贝进行了定义,而其他函数都未定义。比较类函数将其变量视为unsigned char类型的数组。1.strcpy#include <string.h>char *strcpy(char *str1, const char *str2);把字符串str2(包括"")拷贝到字符串str1当中,并返回str1。2. strncpy#include <string.h>char *strncpy(char *str1, const char *str2, size_t count);把字符串str2中最多count个字符拷贝到字符串str1中,并返回str1。如果str2中少于count个字符,那么就用""来填充,直到满足count个字符为止。3.strcat#include <string.h>char *strcat(char *str1, const char *str2);把str2(包括"")拷贝到str1的尾部(连接),并返回str1。其中终止原str1的""被str2的第一个字符覆盖。4.strncat#include <string.h>char *strncat(char *str1, const char *str2, size_t count);把str2中最多count个字符连接到str1的尾部,并以""终止str1,返回str1。其中终止原str1的""被str2的第一个字符覆盖。注意,最大拷贝字符数是count+1。5.strcmp#include <string.h>int strcmp(const char *str1, const char *str2);按字典顺序比较两个字符串,返回整数值的意义如下:小于0,str1小于str2;等于0,str1等于str2;大于0,str1大于str2;6 strncmp#include <string.h>int strncmp(const char *str1, const char *str2, size_t count);同strcmp,除了最多比较count个字符。根据比较结果返回的整数值如下:小于0,str1小于str2;等于0,str1等于str2;大于0,str1大于str2;7 strchr#include <string.h>char *strchr(const char *str, int ch);返回指向字符串str中字符ch第一次出现的位置的指针,如果str中不包含ch,则返回NULL。8 strrchr#include <string.h>char *strrchr(const char *str, int ch);返回指向字符串str中字符ch最后一次出现的位置的指针,如果str中不包含ch,则返回NULL。9 strspn#include <string.h>size_t strspn(const char *str1, const char *str2);返回字符串str1中由字符串str2中字符构成的第一个子串的长度。10 strcspn#include <string.h>size_t strcspn(const char *str1, const char *str2);返回字符串str1中由不在字符串str2中字符构成的第一个子串的长度。11 strpbrk#include <string.h>char *strpbrk(const char *str1, const char *str2);返回指向字符串str2中的任意字符第一次出现在字符串str1中的位置的指针;如果str1中没有与str2相同的字符,那么返回NULL。12 strstr#include <string.h>char *strstr(const char *str1, const char *str2);返回指向字符串str2第一次出现在字符串str1中的位置的指针;如果str1中不包含str2,则返回NULL。13 strlen#include <string.h>size_t strlen(const char *str);返回字符串str的长度,""不算在内。14 strerror#include <string.h>char *strerror(int errnum);返回指向与错误序号errnum对应的错误信息字符串的指针(错误信息的具体内容依赖于实现)。15 strtok#include <string.h>char *strtok(char *str1, const char *str2);在str1中搜索由str2中的分界符界定的单词。对strtok()的一系列调用将把字符串str1分成许多单词,这些单词以str2中的字符为分界符。第一次调用时str1非空,它搜索str1,找出由非str2中的字符组成的第一个单词,将str1中的下一个字符替换为"",并返回指向单词的指针。随后的每次strtok()调用(参数str1用NULL代替),均从前一次结束的位置之后开始,返回下一个由非str2中的字符组成的单词。当str1中没有这样的单词时返回NULL。每次调用时字符串str2可以不同。如:char *p;p = strtok("The summer soldier,the sunshine patriot", " ");printf("%s", p);do {p = strtok("", ", "); /* 此处str2是逗号和空格 */if (p)printf("|%s", p)} while (p);显示结果是:The | summer | soldier | the | sunshine | patriot
2023-07-09 22:41:437

strtok_r函数

free 和 malloc 是对应的。如果从标准库或者系统库中得到的指针,一定是由库来维护的。从strtok_r输出的缓冲是在内部分配的,在程序结束的时候,库会进行释放操作的。如果你最后free了,就会造成double free的错误。 ----------------------------------------myStrBuf是从strtok_r输出的缓冲,系统对把分配到的一个缓冲的地址传给myStrBuf。但是具体是malloc还是其他带字节对齐的分配方法,这个由系统决定的。你只要记住一点,在你自己的程序里面有几个malloc就有几个free,不能多也不能少。其他的指针系统会管理的 ------------------------------------------程序最后是需要free的。free(str)但不是myStrBuf
2023-07-09 22:42:042

怎么把输入的字符串分割

C/C++中的Split函数是strtok()其函数原型如下:char * strtok (char * str, const char * delimiters);函数说明strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为""字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回下一个分割后的字符串指针。返回值返回下一个分割后的字符串指针,如果已无从分割则返回NULL。示例-1/* strtok example */#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 ",p);p = strtok(NULL,split);}getchar();return 0;}本例中,实现对字符串"a,b,c,d*e"用逗号(,)来作界定符对字符串进行分割。输出结果将如下所示:abcd*e因为delimiters支持多个分割符, 我们将本示例中的语句行const char * split = ",";改成 const char * split = ",*"; //用逗号(,)和星号(*)对字符串进行分割这样输出结果将如下所示:abcde
2023-07-09 22:42:231

C++ strtok()函数分解中文字符串出错

不知道你的汉字编码方式,标点符号如果是全角的话,很容易出现这种问题。strtok是按单字节搜索的。例如gbk编码的。?都可能和”常“字混淆(它们有一个同样的字节编码0xA3)。
2023-07-09 22:42:313

怎么根据一个数组里面对象的值把这个数组分成多个数组

可以使用strtok函数把一个字符数组分解成多个字符数组。1、strtok函数:原型:char *strtok(char s[], const char *delim);功能:将一个字符串分解为一组字符串,s为要分解的字符串,delim为分隔符字符串;说明:当strtok函数在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针;头文件:string.h;返回值:从字符串s开头开始的一个个被分割的字符串。分割结束时,返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。2、例程:#include<stdio.h>#include<string.h>int main(){ char input[16]="abc,d,ef,g";//待分解字符串 char* delim=",";//分隔符字符串 char* p=strtok(input,delim);//第一次调用strtok while(p!=NULL){//当返回值不为NULL时,继续循环 printf("%s ",p);//输出分解的字符串 p=strtok(NULL,delim);//继续调用strtok,分解剩下的字符串 } return 0;}
2023-07-09 22:42:371

C语言中用到了strtok函数,为什么第一个参数实参只能传入数组,而不能是char *

楼上的说得正确,不过还有一个没说到。char *s=“a,b,c,d"就是把后面常量的首地址给了s。但是char s[]=“a,b,c,d",相当于char s[8];memcpy(s,"a,b,c,d",8);每次执行到的时候都会,把常量"a,b,c,d"复制一遍。带引号的常量放在只读数据区,修改出错。s[8]是一个放在堆栈里面的数组可以修改。你使用数组初始化语句,相当于每次复制一遍字符串到s。这样你修改堆栈中的就不会出错了。
2023-07-09 22:42:442

strtok函数中的分隔符

是的!若你还想把别的什么符号当分隔符的话, 就加到 char sep[] = "/ ";双引号里就好了.比如 多加 和: 那么 char sep[] = "/ :";
2023-07-09 22:42:513

C语言strtok函数分割含有空值的字符串

肯定被忽略的,因为使用的是|分隔,||之间没有数据所以为空!你想要什么样的结果?
2023-07-09 22:42:581

C语言strtok函数分割含有空值的字符串

看了半天也没明白你要干嘛,你可以把你上面的代码删掉,直接说你要通过ptdcbuff = “2| |7677|7678| |001| |0.0700|7|2013-04-01 00:00:00||1|01|3P43”得到什么?
2023-07-09 22:43:053

函数strtok的第一个参数为什么是NULL

#include <string.h>static char *olds;#undef strtokchar *strtok (s, delim)char *s;const char *delim;{char *token;if (s == NULL)s = olds;/* Scan leading delimiters. */s += strspn (s, delim); //将指针移到第一个非delim中的字符的位置if (*s == ""){olds = s;return NULL;}olds = __rawmemchr (token, "");else{/* Terminate the token and make OLDS point past it. */*s = "";olds = s + 1;}return token;}
2023-07-09 22:43:121

c++ strtok分割空格失败

strtok_s函数,会破坏源字符串,改写源字符串中的内容,即这里的pInString。所以这里的pInString不能定义成char*,而要定义成char pInString[];char pInString[] = "this is an example that is an example";这样就行了。具体可以百度下,char*和char[]的区别
2023-07-09 22:43:301

visual C++ 2005中使用strtok函数报警?

那个函数属于微软(Visual C++ 2005的作者)认为的"不安全"的字符串函数,有可能导致溢出的,建议你用strtok_s函数代替,就不会有警告了。类似的像strcat之类的函数也会有警告。
2023-07-09 22:43:481

c语言字符串处理函数的英文原名?

函数名: strrchr功 能: 在串中查找指定字符的最后一个出现用 法: char *strrchr(char *str, char c);举例:[cpp] view plain copychar fullname="./lib/lib1.so";char *ptr;ptr = strrchr(fullname,"/");printf("filename is %s",++ptr);//运行结果:filename is lib1.so函数名: strchr功 能: 在串中查找指定字符的第一个出现用 法: char *strchr(char *str, char c);举例:[cpp] view plain copychar fullname="./lib/lib1.so";char *ptr;ptr = strrchr(fullname,".");printf("after strchr() is %s",++ptr);//运行结果:after strchr() is /lib/lib1.so函数名: strtok功 能: 在串中查找指定字符的第一个出现用 法: char *strtok(char *s, char *delim);说明:1.strtok函数的实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL("/0′)来替换,直到找遍整个字符串。这句话有两层含义:(1)每次调用strtok函数只能获得一个分割单位。(2)要获得所有的分割单元必须反复调用strtok函数。2.strtok函数以后的调用时的需用NULL来替换s.3.形参s(要分割的字符串)对应的变量应用char s[]=”….”形式,而不能用char *s=”….”形式。举例:[cpp] view plain copyvoid main(){char buf[]=”Golden Global View”;char* token = strtok( buf, ” “);while( token != NULL ){printf( ”%s “, token );token = strtok( NULL, ” “);}return 0;}/*其结果为:GoldenGlobalView*/
2023-07-09 22:43:582

strtok能不能分割string类型的字符串 c++中 能不能用strtok(string,字符数组)这种格式

举个例子string d;d="123123,abc,566";char c[100];//要足够大哦strcpy(c,d.c_str());然后就可以使用strtok(c,",");
2023-07-09 22:44:052

c++中类似strtok的处理string函数有没有?

#include <string>#include <list>using namespace std;list<string> tokenize(string text, string sep){ int last_pos=0; int pos=0; list<string> listWords; while(true){ pos=text.find_first_of(sep,last_pos); if(pos==string::npos){ break; }else{ listWords.push_back(text.substr(last_pos,pos-last_pos)); last_pos=pos+1; } }; return listWords;}int main(){ string text="aaa bbb cc dddd eeee"; list<string> words=tokenize(text," "); for (list<string>::const_iterator ci = words.begin(); ci != words.end(); ++ci) cout << *ci << " ";return 0;}================输出aaabbbccdddd================看了你的题后写的,想想c++的string的操作相对c串丰富,实现上比c应该容易一些加分加分
2023-07-09 22:44:125

strtok 分隔符是一个字符串怎么办 分隔符在第0位怎么办?

修改下被分割字符串所在变量的类型,char* str =“|abc|def ” 改成 char str[] =“|abc|def”,注意前者指向的内存是不可更改的! strtok的使用没有问题
2023-07-09 22:44:251

使用完strtok函数之后,用strcpy将指针的值复制到数组里,显示数组溢出了,这是为什么,解决方法??

strcpy(B[m++],p); 这句话也不对啊1, m的值每次只是加1而已,你要求输入的字符串,都是一个字符一个字符分隔的吗?2, B[m]里面的值是不定的,应该使用&B[m]来取得地址才对。strcpy(&B[m],p)m += strlen(p); //如果""想保留的话就m += strlen(p) + 1
2023-07-09 22:44:323

用strtok函数拆分一个字符串时,原字符串是不是被破坏了啊?

肯定被破坏了,你测试一下,会发现只有你碰到第一个分割符前的那些字符保留着····
2023-07-09 22:44:403

C++如何用strtok多次分割,对分割得到的字符串再分割?

下面的C代码可以达到你的要求,仅供参考。#include <stdio.h>#include <string.h>void main(int argc, char *argv[]){ char code[] = "th is$i s$a n$prob lem"; char *p1 = code; char *p2; while((p2 = strtok(p1, " $")) != (char *)NULL) { printf("%s ", p2); p1 = (char *)NULL; }}对问题补充的回答:如果需要“该字符串先用"$"作为分隔符分割,再对分割出的字符串用" "(空格)作为分隔符分割”,那么问题的解决将变得稍微复杂了些。请参看如下代码。#include <stdio.h>#include <string.h>void main(int argc, char *argv[]){ char code[] = "th is$i s$a n$prob lem"; int len = strlen(code); char *p1 = code; char *p2; char *p3; while((len > 0) && (p2 = strtok(p1, "$")) != (char *)NULL) { p1 += strlen(p2) + 1; len -= strlen(p2) + 1; while((p3 = strtok(p2, " ")) != (char *)NULL) { printf("%s ", p3); p2 = (char *)NULL; } }}
2023-07-09 22:44:461

c语言中strtok函数使用10次后无效是什么原因?

#include #include #include//动态内存分配函数malloc和free的头文件 int main() { int i,s; char *a,*p,*str[100]; a=(char*)malloc(sizeof(char)*100);//开辟一个最大字节长度为100的空间 scanf("%[^ ]",a);//将开辟的空间拿来做字符串,使用scanf无法输入空格后面的[^ ]过滤了换行符之后的字符,这样就没事了 getchar();//还需要吸收垃圾字符,这个不能没有否则会出现死循环 p=strtok(a," ");//第一次以空格符分割 for(s=0;p;s++)//当p为空时跳出 { str[s]=p;//将分割的传给指针数组str,str相当于字符串数组 p=strtok(NULL," ");//接着在分割 } printf("%s",str[0]); for(i=1;i
2023-07-09 22:44:531

如何用C语言写自己的strtok函数

strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置线程安全的函数叫strtok_r,ca。运用strtok来判断ip或者mac的时候务必要先用其他的方法判断"."或":"的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
2023-07-09 22:46:171

strtok为什么是unsafe的

strtok是一个线程不安全的函数,因为它使用了 静态分配的空间来存储被分割的字符串位置 线程安全的函数叫strtok_r,运用strtok来判断ip或者mac的时候务必要先用其他的方法判断"."或":"的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key
2023-07-09 22:46:241

mdk5不支持strtok函数吗

strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置线程安全的函数叫strtok_r,ca。运用strtok来判断ip或者mac的时候务必要先用其他的方法判断"."或":"的个数,因为用strtok截断的话,比如:"192..168.08"这个字符串,strtok只会截取四次,中间的无论多少都会被当作一个key。函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
2023-07-09 22:46:301

C语言有没有把字符串拆分为数组的函数?

用strtok函数实现吧。void split( char **arr, char *str, const char *del)//字符分割函数的简单定义和实现{ char *s =NULL; s=strtok(str,del); while(s != NULL) { *arr++ = s; s = strtok(NULL,del); }}int main(){ int i; char *myArray[4]; char s[] = "张三$|男$|济南$|大专学历$|"; memset(myArray, 0x0, sizeof(myArray)); split(myArray, s, "$|"); for (i=0; i<4; i++) { printf("%s ", myArray[i]); } return 0;}
2023-07-09 22:46:391

c++代码复制过来后怎么让它自动分格

VS2005下的快捷方式是Ctrl + K, Ctrl + C(两个顺次按,注意左下角的提示)不过代码格式是靠你自己控制的。在选项里有。
2023-07-09 22:46:461

C语言中使用strtok函数分割中文字符串的过程中出现问号

原因是,strtok函数的分割符是单字节字符,而一个汉字是两个字节。所以,当分隔符为“的是”时实际上是指定了四个分隔符。
2023-07-09 22:46:531

求字符串处理函数(全)

函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(string, str1); printf("%sn", string); return 0; } 函数名: strcat 功 能: 字符串拼接函数 用 法: char *strcat(char *destin, char *source); 程序例: #include <string.h> #include <stdio.h> int main(void) { char destination[25]; char *blank = " ", *c = "C++", *Borland = "Borland"; strcpy(destination, Borland); strcat(destination, blank); strcat(destination, c); printf("%sn", destination); return 0; } 函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处 用 法: char *strchr(char *str, char c); 程序例: #include <string.h> #include <stdio.h> int main(void) { char string[15]; char *ptr, c = "r"; strcpy(string, "This is a string"); ptr = strchr(string, c); if (ptr) printf("The character %c is at position: %dn", c, ptr-string); else printf("The character was not foundn"); return 0; } 函数名: strcmp 功 能: 串比较 用 法: int strcmp(char *str1, char *str2); 看Asic码,str1>str2,返回值 > 0;两串相等,返回0程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc"; int ptr; ptr = strcmp(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); else printf("buffer 2 is less than buffer 1n"); ptr = strcmp(buf2, buf3); if (ptr > 0) printf("buffer 2 is greater than buffer 3n"); else printf("buffer 2 is less than buffer 3n"); return 0; } 函数名: strncmpi 功 能: 将一个串中的一部分与另一个串比较, 不管大小写 用 法: int strncmpi(char *str1, char *str2, unsigned maxlen); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = strcmpi(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); if (ptr < 0) printf("buffer 2 is less than buffer 1n"); if (ptr == 0) printf("buffer 2 equals buffer 1n"); return 0; } 函数名: strcpy 功 能: 串拷贝 用 法: char *strcpy(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strcpy(string, str1); printf("%sn", string); return 0; } 函数名: strcspn 功 能: 在串中查找第一个给定字符集内容的段 用 法: int strcspn(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *string1 = "1234567890"; char *string2 = "747DC8"; int length; length = strcspn(string1, string2); printf("Character where strings intersect is at position %dn", length); return 0; } 函数名: strdup 功 能: 将串拷贝到新建的位置处 用 法: char *strdup(char *str); 程序例: #include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *dup_str, *string = "abcde"; dup_str = strdup(string); printf("%sn", dup_str); free(dup_str); return 0; } 函数名: stricmp 功 能: 以大小写不敏感方式比较两个串 用 法: int stricmp(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = stricmp(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); if (ptr < 0) printf("buffer 2 is less than buffer 1n"); if (ptr == 0) printf("buffer 2 equals buffer 1n"); return 0; } 函数名: strerror 功 能: 返回指向错误信息字符串的指针 用 法: char *strerror(int errnum); 程序例: #include <stdio.h> #include <errno.h> int main(void) { char *buffer; buffer = strerror(errno); printf("Error: %sn", buffer); return 0; } 函数名: strcmpi 功 能: 将一个串与另一个比较, 不管大小写 用 法: int strcmpi(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = strcmpi(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); if (ptr < 0) printf("buffer 2 is less than buffer 1n"); if (ptr == 0) printf("buffer 2 equals buffer 1n"); return 0; } 函数名: strncmp 功 能: 串比较 用 法: int strncmp(char *str1, char *str2, int maxlen); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc"; int ptr; ptr = strncmp(buf2,buf1,3); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); else printf("buffer 2 is less than buffer 1n"); ptr = strncmp(buf2,buf3,3); if (ptr > 0) printf("buffer 2 is greater than buffer 3n"); else printf("buffer 2 is less than buffer 3n"); return(0); } 函数名: strncmpi 功 能: 把串中的一部分与另一串中的一部分比较, 不管大小写 用 法: int strncmpi(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBBccc", *buf2 = "bbbccc"; int ptr; ptr = strncmpi(buf2,buf1,3); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); if (ptr < 0) printf("buffer 2 is less than buffer 1n"); if (ptr == 0) printf("buffer 2 equals buffer 1n"); return 0; } 函数名: strncpy 功 能: 串拷贝 用 法: char *strncpy(char *destin, char *source, int maxlen); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strncpy(string, str1, 3); string[3] = ""; printf("%sn", string); return 0; } 函数名: strnicmp 功 能: 不注重大小写地比较两个串 用 法: int strnicmp(char *str1, char *str2, unsigned maxlen); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBBccc", *buf2 = "bbbccc"; int ptr; ptr = strnicmp(buf2, buf1, 3); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); if (ptr < 0) printf("buffer 2 is less than buffer 1n"); if (ptr == 0) printf("buffer 2 equals buffer 1n"); return 0; } 函数名: strnset 功 能: 将一个串中的所有字符都设为指定字符 用 法: char *strnset(char *str, char ch, unsigned n); 程序例: #include <stdio.h> #include <string.h> int main(void) { char *string = "abcdefghijklmnopqrstuvwxyz"; char letter = "x"; printf("string before strnset: %sn", string); strnset(string, letter, 13); printf("string after strnset: %sn", string); return 0; } 函数名: strpbrk 功 能: 在串中查找给定字符集中的字符 用 法: char *strpbrk(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> int main(void) { char *string1 = "abcdefghijklmnopqrstuvwxyz"; char *string2 = "onm"; char *ptr; ptr = strpbrk(string1, string2); if (ptr) printf("strpbrk found first character: %cn", *ptr); else printf("strpbrk didn"t find character in setn"); return 0; } 函数名: strrchr 功 能: 在串中查找指定字符的最后一个出现 用 法: char *strrchr(char *str, char c); 程序例: #include <string.h> #include <stdio.h> int main(void) { char string[15]; char *ptr, c = "r"; strcpy(string, "This is a string"); ptr = strrchr(string, c); if (ptr) printf("The character %c is at position: %dn", c, ptr-string); else printf("The character was not foundn"); return 0; } 函数名: strrev 功 能: 串倒转 用 法: char *strrev(char *str); 程序例: #include <string.h> #include <stdio.h> int main(void) { char *forward = "string"; printf("Before strrev(): %sn", forward); strrev(forward); printf("After strrev(): %sn", forward); return 0; } 函数名: strset 功 能: 将一个串中的所有字符都设为指定字符 用 法: char *strset(char *str, char c); 程序例: #include <stdio.h> #include <string.h> int main(void) { char string[10] = "123456789"; char symbol = "c"; printf("Before strset(): %sn", string); strset(string, symbol); printf("After strset(): %sn", string); return 0; } 函数名: strspn 功 能: 在串中查找指定字符集的子集的第一次出现 用 法: int strspn(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *string1 = "1234567890"; char *string2 = "123DC8"; int length; length = strspn(string1, string2); printf("Character where strings differ is at position %dn", length); return 0; } 函数名: strstr 功 能: 在串中查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); 程序例: #include <stdio.h> #include <string.h> int main(void) { char *str1 = "Borland International", *str2 = "nation", *ptr; ptr = strstr(str1, str2); printf("The substring is: %sn", ptr); return 0; } 函数名: strtod 功 能: 将字符串转换为double型值 用 法: double strtod(char *str, char **endptr); 程序例: #include <stdio.h> #include <stdlib.h> int main(void) { char input[80], *endptr; double value; printf("Enter a floating point number:"); gets(input); value = strtod(input, &endptr); printf("The string is %s the number is %lfn", input, value); return 0; } 函数名: strtok 功 能: 查找由在第二个串中指定的分界符分隔开的单词 用 法: char *strtok(char *str1, char *str2); 程序例: #include <string.h> #include <stdio.h> int main(void) { char input[16] = "abc,d"; char *p; /* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, ","); if (p) printf("%sn", p); /* A second call to strtok using a NULL as the first parameter returns a pointer to the character following the token */ p = strtok(NULL, ","); if (p) printf("%sn", p); return 0; } 函数名: strtol 功 能: 将串转换为长整数 用 法: long strtol(char *str, char **endptr, int base); 程序例: #include <stdlib.h> #include <stdio.h> int main(void) { char *string = "87654321", *endptr; long lnumber; /* strtol converts string to long integer */ lnumber = strtol(string, &endptr, 10); printf("string = %s long = %ldn", string, lnumber); return 0; } 函数名: strupr 功 能: 将串中的小写字母转换为大写字母 用 法: char *strupr(char *str); 程序例: #include <stdio.h> #include <string.h> int main(void) { char *string = "abcdefghijklmnopqrstuvwxyz", *ptr; /* converts string to upper case characters */ ptr = strupr(string); printf("%sn", ptr); return 0; } 函数名: swab 功 能: 交换字节 用 法: void swab (char *from, char *to, int nbytes); 程序例: #include <stdlib.h> #include <stdio.h> #include <string.h> char source[15] = "rFna koBlrna d"; char target[15]; int main(void) { swab(source, target, strlen(source)); printf("This is target: %sn", target); return 0; }PS:isalpha()是字符函数,不是字符串函数,isalpha 原型:extern int isalpha(int c); 用法:#include <ctype.h> 功能:判断字符c是否为英文字母 说明:当c为英文字母a-z或A-Z时,返回非零值,否则返回零。 举例: // isalpha.c #include <syslib.h> #include <ctype.h> #include <stdio.h> main() { int c; clrscr(); // clear screen printf("Press a key"); for(;;) { c=getchar(); clrscr(); printf("%c: %s letter",c,isalpha(c)?"is":"not"); } return 0; // just to avoid warnings by compiler }
2023-07-09 22:47:004

我想用c语言中的strtok函数得到一个字符串中由分隔符分割的某些关键字,并处理

通过判断,可以对某些关键字进行处理,但好像没法获得当前是什么分隔符这样的信息。
2023-07-09 22:47:072

VS2005及2008不能用 strtok?

怎么会呢,我在vs2008控制台下试了能使用的。如果你是在windows程序中,请确认的默认编码是ascii码。如果是unicode码,请用wcstok函数替换该函数。其他字符串处理函数都需要改变的
2023-07-09 22:47:191

C语言,strtok返回值为NULL是为什么?

您好,很高兴能为您解决问题。 如果出错,您可以在出错后马上调用GetLastError,函数会返回一个整数。返回之后,你可以去网上查GetLastError返回值的含义。比如126就是找不到模块句柄的意思。希望我的解答能帮到您,望采纳!
2023-07-09 22:47:431

tc中有没有与strtok相似的函数

貌似没有 不过可以自己写一个 这个函数的功能并不难 给你一个参考的 char * strtok ( char * string, const char * control ){ unsigned char *str; const unsigned char *ctrl = control; unsigned char map[32]; int count; static char *nextoken; for (count = 0; count < 32; count++) map[count] = 0; do { map[*ctrl >> 3] |= (1 << (*ctrl & 7)); } while (*ctrl++); if (string) str = string; else str = nextoken; while ( (map[*str >> 3] & (1 << (*str & 7))) && *str ) str++; string = str; for ( ; *str ; str++ ) if ( map[*str >> 3] & (1 << (*str & 7)) ) { *str++ = ""; break; } nextoken = str; if ( string == str ) return NULL; else return string;}
2023-07-09 22:47:501

C语言中字符切割函数split的实现

c语言中 有切割字符串的函数啊!strtok函数(const char *str, const char *ch)第一个是字符串,第二个是以那个字符做切割。例子:#include <stdio.h>#include <string.h>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(" ");return 0;} char s[] = "dlkjf-sdlkfjsdflsdkljfl"sldkjfsdkfjsdlflskdjfls";如果想用-和两个符号切割的话char *delim = "-";这样就可以了
2023-07-09 22:47:591

thinkphp 数组 如何割分。

thinkphp没有分割字符串,有截取字符串.php自带函数可以分割字符串如下:explode(separator,string,limit) separator 必需。规定在哪里分割字符串。 string 必需。要分割的字符串。 limit 可选。规定所返回的数组元素的最大数目。 1234$text="1,2,3";$lines = explode(",", $text);//这里使用逗号分隔$string = "Hello world. Beautiful day today.";$str= explode(" ", $string );//使用空格分隔strtok(string,split)string 必需。规定要分割的字符串.split 必需。规定一个或多个分割字符。 12$string = "Hello world. Beautiful day today.";$token = strtok($string, " ");//用空格分隔str_split(string,length)string 必需。规定要分割的字符串。 length 可选。规定每个数组元素的长度。默认是 1。print_r(str_split("Hello"));thinkphp自带截取字符串如下:对于英文字符可使用如下形式:1{$vo.title|substr=0,5}如果是中文字符thinkphp提供了msubstr,用法如下:12function msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)//使用如下{$vo.title|msubstr=5,5,"utf-8′,true}msubstr函数说明如下:msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true) $str:要截取的字符串 $start=0:开始位置,默认从0开始 $length:截取长度 $charset=”utf-8″:字符编码,默认UTF-8 $suffix=true:是否在截取后的字符后面显示省略号,默认true显示,false为不显示
2023-07-09 22:48:122