Strcat,strcpy,strcmp,Strlen函数原型
Strcat,strcpy,strcmp,Strlen函数原型
1、Strcat函数原型如下:
#include
#include
#include
char *strca(char *dst, const char * src)
{
char *dst_t;
dst_t = (char *)malloc(sizeof(dst) + sizeof(src));
char *start = dst_t;
assert(dst && src);
while(*dst_t = *dst)
{
dst_t++; dst++;
}
while(*dst_t = *src)
{
dst_t++; src++;
}
*dst_t = '\0';
return start;
}
下面,贴上一个我自己写的strcpy函数,以做比较;相比之下,我自己写的这个strcpy效率就显得低了。char * my_strcat(char *s, char *t)
{
int i;
char *st, *p_st, *p_s, *p_t;
st = (char *)malloc(strlen(s)+strlen(t)+1);
if(st == NULL)
{
return NULL;
printf("malloc fail!\n");
}
p_st = st;
p_s = s;
p_t = t;
for(i = 0; i < strlen(s); i++)
*(p_st++) = *(p_s++);
for(i = strlen(s); i<(strlen(s) + strlen(t)); i++)
*(p_st++) = *(p_t++);
*p_st = '\0';
return st;
}
int main()
{
char *dst = {"wo ai "};
char *src = {"wo de guo jia !"};
printf("%s\n",strca(dst,src));
return 0;
}
2、Strcpy函数原型如下:
char *strcpy(char *strDest, const char *strScr)
{
char *address=strDest;
assert((strDest != NULL) && (strScr != NULL));
while(*strScr) //是while(*strScr != ’\0’)的简化形式;
{
*strDest++ = *strScr++;
}
*strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度return address; //时,如果没有改语句,就会出错了。
}
以下是在VC6.0中调试的例子,函数名用strcpya代替。
#include
#include
char *strcpya(char *strDest, const char *strScr)
{
char *address = strDest;
assert((strDest != NULL) && (strScr != NULL));
while(*strScr)
{
*strDest++ = *strScr++;
}
*strDest = '\0';
return address;
}
void main()
{
char str1[100]={"i love"};
char str2[50]={"China"};
printf("%s\n",strcpya(str1,str2));
}
3、Strcmp函数原型如下:
int strcmp (const char *str1,const char *str2)
{
int len = 0;
assert((str1 != '\0') && (str2 != '\0'));
while(*str1 && *str2 && (*str1 == *str2))
{
str1++;
str2++;
}
return *str1-*str2;
}
以下是在VC6.0中调试的例子,函数名用strcmpa代替。
#include
#include
int strcmpa (const char *str1,const char *str2)
{
int len = 0;
assert((str1 != '\0') && (str2 != '\0'));
while(*str1 && *str2 && (*str1==*str2))
{
str1++;
str2++;
}
return *str1-*str2;
}
void main()
{
char str1[100] = {"i love"};
char str2[50] = {"China "};
printf("%d\n",strcmpa(str1,str2));
}
4、Strlen函数原型如下:
int strlen(const char *str)
{
int len = 0;
assert(str != NULL);
while(*str++)
{
len++;
}
return len;
}
以下是在VC6.0中调试的例子,函数名用strlena代替。
#include
#include
int strlena(const char *str)
{
int len = 0;
assert(str != NULL); while(*str++)
{
len++;
}
return len;
}
void main()
{
char str1[100] = {"i love"}; char str2[50] = {"China "}; printf("%d\n",strlena(str1));
C字符串处理函数全
strcpy(char destination[], const char source[]); strcpy:将字符串source拷贝到字符串destination中。 strcpy函数应用举例 原型:strcpy(char destination[], const char source[]); 功能:将字符串source拷贝到字符串destination中 例程: #include 一、s trlen函数 strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。 【返回值】返回字符串s 的字符数。 注意一下字符数组,例如 char str[100] = "https://www.360docs.net/doc/457997477.html,/cpp/u/biaozhunku/"; 定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。 如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如 char str[6] = "abcxyz"; strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。 注意:strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。 如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。 二、s trcat函数 strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); 【参数】dest 为目的字符串指针,src 为源字符串指针。 strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个NULL。 注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。 第二章习题答案 1.给出以下概念的解释说明。 真值机器数数值数据非数值数据无符号整数带符号整数 定点数原码补码变形补码溢出浮点数 尾数阶阶码移码阶码下溢阶码上溢 规格化数左规右规非规格化数机器零非数(NaN) BCD码逻辑数ASCII码汉字输入码汉字内码机器字长 大端方式小端方式最高有效位最高有效字节(MSB) 最低有效位 最低有效字节(LSB) 掩码算术移位逻辑移位0扩展 符号扩展零标志ZF 溢出标志OF 符号标志SF 进位/借位标志CF 2.简单回答下列问题。 (1)为什么计算机内部采用二进制表示信息既然计算机内部所有信息都用二进制表示,为什么还要用到十六进制或八进制数 (2)常用的定点数编码方式有哪几种通常它们各自用来表示什么 (3)为什么现代计算机中大多用补码表示带符号整数 (4)在浮点数的基数和总位数一定的情况下,浮点数的表示范围和精度分别由什么决定两者如何相互制约 (5)为什么要对浮点数进行规格化有哪两种规格化操作 (6)为什么有些计算机中除了用二进制外还用BCD码来表示数值数据 (7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)说明这些编码中哪些用二进制编码,哪些不用二进制编码,为什么 3.实现下列各数的转换。 (1)10= ()2= () 8= () 16 (2) 2 = ()10= () 8= () 16= () 8421 (3)(0101 1001 8421 = ()10= () 2= () 16 (4)16 = ()10= () 2 4.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码表示。 +,–,+,–,+,–,+0,–0 5.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。 +1001,–1001,+1,–1,+10100,–10100,+0,–0 6.已知 [x]补,求x (1)[x]补= (2)[x]补= (3)[x]补=01010010 (4)[x]补= 7.某32位字长的机器中带符号整数用补码表示,浮点数用IEEE 754标准表示,寄存器R1和R2的内容分别为R1:0000108BH,R2:8080108BH。不同指令对寄存器进行不同的操作,因而不同指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器R1和R2的内容,则R1和R2中操作数的真值分别为多少 (1)无符号整数加法指令 (2)带符号整数乘法指令 (3)单精度浮点数减法指令 8.假定机器M的字长为32位,用补码表示带符号整数。表中第一列给出了在机器M上执行的C语言程序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。 表题8用表 Strcat,strcpy,strcmp,Strlen函数原型 1、Strcat函数原型如下: #include p_s = s; p_t = t; for(i = 0; i < strlen(s); i++) *(p_st++) = *(p_s++); for(i = strlen(s); i<(strlen(s) + strlen(t)); i++) *(p_st++) = *(p_t++); *p_st = '\0'; return st; } int main() { char *dst = {"wo ai "}; char *src = {"wo de guo jia !"}; printf("%s\n",strca(dst,src)); return 0; } 2、Strcpy函数原型如下: char *strcpy(char *strDest, const char *strScr) { char *address=strDest; assert((strDest != NULL) && (strScr != NULL)); while(*strScr) //是while(*strScr != ’\0’)的简化形式; { *strDest++ = *strScr++; } *strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度return address; //时,如果没有改语句,就会出错了。 } 以下是在VC6.0中调试的例子,函数名用strcpya代替。 #include 示例 1.字符串输出示例。 程序: #include int x,y; x=strlen(a); y=strlen("abc13"); printf("%d\n%d\n\n",x,y); } 结果: 4.字符串连接函数的使用。 程序: #include C++常用库函数atoi,itoa,strcpy.strcmp的实现 1.//整数转换成字符串itoa函数的实现 #include "stdafx.h" 1.//整数转换成字符串itoa函数的实现 #include "stdafx.h" #include temp[i++] = '-';//对于负数,要加以负号 } temp[i] = '\0'; i--; while(i>=0)//反向操作 { str[j] = temp[i]; j++; i--; } str[j] = '\0'; } 2. //字符串转换成整数atoi函数的实现 int atoiTest(char s[]) { int i = 0,sum = 0,sign; //输入的数前面可能还有空格或制表符应加判断 while(' '==s[i]||'\t'==s[i]) { i++; } sign = ('-'==s[i])?-1:1; if('-'==s[i]||'+'==s[i]) { i++; } while(s[i]!='\0') { sum = s[i]-'0'+sum*10; i++; } return sign*sum; } 3.//字符串拷贝函数 #include "stdafx.h" #include ***************数学相关**************** 1、函数名称: abs 函数原型: int abs(int x); 函数功能: 求整数x的绝对值 函数返回: 计算结果 参数说明: 所属文件: <>,<> 使用范例: #include <> #include <> int main() { int number=-1234; printf("number: %d absolute value: %d",number,abs(number)); return 0; } 2、函数名称: fabs 函数原型: double fabs(double x); 函数功能: 求x的绝对值. 函数返回: 计算结果 参数说明: 所属文件: <> 使用范例: #include <> #include <> int main() { float number=; printf("number: %f absolute value: %f",number,fabs(number)); return 0; } 3、函数名称: sqrt 函数原型: double sqrt(double x); 函数功能: 计算x的开平方. 函数返回: 计算结果 参数说明: x>=0 所属文件: <> 使用范例: #include <> #include <> int main() { double x=,result; result=sqrt(x); printf("The square root of %lf is %lf",x,result); return 0; } 4、函数名称: pow 函数原型: double pow(double x,double y); 函数功能: 计算以x为底数的y次幂,即计算x^y的值. 函数返回: 计算结果 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} 经典问题: double* (*a)[3][6]; cout< 字符串处理函数大全 bcmp(比较内存内容)相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件;include 字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。 1.使用sizeof获取字符串长度 sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符0)。对于ANSI字符串和UNICODE字符串,形式如下: 1.sizeof(cs)/sizeof(char) 2.sizeof(ws)/sizeof(wchar_t) 可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。 2.使用strlen()获取字符串长度 strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度,如: 1.size_t strlen( const char *string ); 2.size_t wcslen( const wchar_t *string ); strlen()与wcslen()采取0作为字符串的结束符,并返回不包括0在内的字符数目。 3.使用CString::GetLength()获取字符串长度 CStringT继承于CSimpleStringT类,该类具有函数: 1.int GetLength( ) const throw( ); GetLength()返回字符而非字节的数目。比如:CStringW中,"中文ABC"的GetLength()会返回5,而非10。那么对于MBCS呢?同样,它也只能将一个字节当做一个字符,CStringA表示的"中文ABC"的GetLength()则会返回7。 4.使用std::string::size()获取字符串长度 basic_string同样具有获取大小的函数: 1.size_type length( ) const; 2.size_type size( ) const; strcpy_s、strcat_s的用法 1.前言 已经大约有10年没有写程序了,朋友要求我写一个小程序,就动手写了,用的IDE是visual studio 2012。 写的时候,遇到不少问题,最让我感觉好玩的就是这个strcpy_s和strcat_s 函数的问题,为了节省以后可能碰到这个问题的初学者的时间,把这个事情写下来。 程序写好后,经常报错:Expression: (L”Buffer is too small” && 0),报错图如下: 我在网上查了一些方法,总是解决不了问题,我最后跟踪了一下程序,又到visual studio的网站上看了一下,解决了问题。解决问题的方法如下。 2.用法 2.1.strcpy_s的定义 errno_t strcpy_s(char *strDestination,size_t numberOfElements, const char *strSource ); 2.2.strcpy_s的参数含义 strDestination 目标字符串缓冲区的位置。 numberOfElements 目标字符串缓冲区的大小。 strSource Null 终止的源字符串缓冲区。 注意:第二个参数numberOfElements是目标字符缓冲区的大小,不是本次需要拷贝的字符的多少,我所犯错误就在这里了。strcat_s的参数,也是同样的含义,是要求给出整个目标字符缓冲区的大小,不是本次追加字符的大小。 2.3.strcpy_s的用法 正确用法示例: void main() { char dest[30], source[10]; for(int i=0; i<9;i++) { source[i] ='a'; } source[9]=0; //把最后置为0,标识字符串的结束。 strcpy_s(dest,30, source); //请务必注意此处的第二个参数为目标缓冲区的大小,不可以写上源字符串的长度。 cout< 目录 一、数组或字符串的长度 1、sizeof()---求所占的字节数 (1)、对于整型字符型数组 (2)、对于整型或字符型指针 2、strlen()---字符数组或字符串所占的字节数 (1)、针对字符数组 (2)、针对字符指针 3、sizeof()与strlen()区别 4、c++中的字符串string的长度 一、数组或字符串的长度 1、sizeof()---求所占的字节数 (1)、对于整型字符型数组 int A[]={1,4,5,2,8,6,0}; //求整型数组A所占的字节数 int i=sizeof(A); //i表示整型数组A所占的总空间的字节数 cout<<” i=sizeof(A)= ”< 浙江传媒学院《C语言程序设计》期终(考试)(A)卷 2005—2006 学年第二学期任课教师 系班姓名学号得分 一、选择题(共40分,每小题2分) 1、组成C语言程序的是() A、过程 B、函数 C、子程序 D、主程序和子程序 2、下列字符序列中,合法的标识符是() A、S.b,sum,average,_above B、class,day,louts_1,2day C、#md,&12x,momth,student_n1 D、D56,r_1,name,_st_1 3、设n=10,i=4,则赋值运算n%=i+2执行后,n的值为() A、0 B、2 C、4 D、6 4、下述程序的输出结果是() #include 字符函数和字符串函数 头文件:字符串函数头文件:#include 5. Scanf(“%d%c%f”,&a,&b,&c); 输入时1234a123h26↙在输入遇到时空格回车 tab或其他非法输入就会认定输入完毕 Gets (字符数组):读入字符串函数 Gets(str)从键盘键入a b↙括号里为字符数组str的起始地址,Puts(字符数组):输出字符串函数 Strcat(字符数组1,字符数组2):字符串连接函数(2连接在1后面) Strcpy和strncpy:字符串复制函数 Strcpy(字符数组1,字符数组2):将2复制到1 数组1 要为数组名,字符串2可以为数组名或者字符串 Strncpy(str1,str2,2):将str2的前两个字符复制到str1,取代str1的前两个字符 Strcmp:字符串比较函数 Strcmp(str1,str2):相等则为0(对字符串自左向右逐个字母进行比较) Strlen(字符数组):测字符串的实际长度 Strlwr(字符串)将字符串转换为大写 Strupr(字符串)将字符串转换为小写 C语言中的sizeof的理解。。 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof(var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。 注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 如sizeof(max)若此时变量max定义为int max(),sizeof(char_v)若此时char_v定义为char char_v[MAX]且MAX未知,sizeof(void)都不是正确形式。 三、sizeof的结果 sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 1、若操作数具有类型char、unsigned char或signed char,其结果等于1。 ANSI C正式规定字符类型为1字节。 2、int、unsigned int、short int、unsigned short、long int、unsigned long、float、double、long double类型的sizeof在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。 3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。 4、当操作数具有数组类型时,其结果是数组的总字节数。 5、共用体类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof 是这种类型对象的总字节数。 让我们看如下结构: struct{char b;double x;}a; 在某些机器上sizeof(a)=12,而一般sizeof(char)+sizeof(double)=9。 这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。 6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。 四、sizeof与其他操作符的关系 sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。 五、sizeof的主要用途 1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如: void*malloc(size_t size), size_t fread(void*ptr, size_t size, size_t nmemb, FILE*stream)。 2、sizeof的另一个的主要用途是计算数组中元素的个数。例如: void*memset(void*s, int c, sizeof(s))。 使用strcmp()函数时常出现的问题 原型:int strcmp(char *str1,char *str2) 功能:把两字符串str1与str2进行比较,当str1>str2,函数返回1,当str1==str2时,函数返回0,当str1 #include 长沙市中等职业业备课用纸 puts(st1); } 结果: 本程序把初始化赋值的字符数组st1与动态赋值的字符串st2连接起来。 连接前后的状态: 4、使用strcat函数还应注意: 字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。 (二)、字符串复制函数strcpy 1、格式:strcpy (字符数组名1,字符数组名2) 2、功能:把字符数组2中的字符串复制到字符数组1中。串结束标志“\0”也一同复制。字符数组名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。 3、例:写出下列程序的功能: #include"string.h" main() { char st1[20]="012345678901234",st2[]="C Language"; strcpy(st1,st2); puts(st1);printf("\n"); } 结果: 复制前后的状态: 4、使用strcpy函数还应注意: ①字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。 ②结束标志“\0”也一同复制。 ③字符数组名2,也可以是一个字符串常量。相当于把一个字符串赋予一个字符数组。 ④不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的: str1=″China″; str1=str2; 而只能用strcpy函数将一个字符串复制到另一个字符数组中去。 三、课堂练习:写出下列程序运行的结果 #include char a[]="Time",b[]="Tom"; for(i=0;a[i]!='\0'&&b[i]!='\0';i++) if(a[i]==b[i]) if(a[i]>='a'&&b[i]<='z') printf("%c",a[i]-32); else printf("%c",a[i]+32); else printf("*"); } 结果: 2、练习:设计程序,实现strcpy函数的功能 #include 常用字符串函数 /************************************* ************************************* ***** 一.NSString ************************************* ************************************* *****/ /*----------------创建字符串的方法 ----------------*/ //1、创建常量字符串。NSString *astring = @"Welcome to 1000phone"; //2、通过实例化方法initWithString:实例化一个字符串对象 NSString *astring = [[NSString alloc] initWithString:@" I love iOS!"]; NSLog(@"astring:%@",astring);?[astring release]; //3、用标准c创建字符串: initWithCString:encoding:方法 const char *cString = "I love iphone"; NSString * aString = [[NSString alloc]initWithCString:cString encoding:NSUTF8StringEncoding];? NSLog(@"astring:%@",aString);?[aString release]; 或者:用initWithUTF8String:实例化一个字符串对象const char *p = " Welcome to Beijing!";?NSString *string = [[NSString alloc]initWithUTF8String:p]; //4、创建格式化字符串:占位符(由一个%加一个字符组成) int age = 23;?NSString *astring = [[NSString alloc] initWithFormat:@”I am %d”,age]]; NSLog(@"astring:%@",astring);?[astring release]; //5、通过静态方法创建字符串对象NSString * str1 = [NSString stringWithString:@"I love programming!"];?NSString * str2 = [NSString stringWithUTF8String:" I love programming!"]; NSString * str3 = [NSStringstrlen,strcat,strcpy,strncpy,strcmp函数的比较
第二章习题-ddg
Strcat,strcpy,strcmp,Strlen函数原型
各种字符串处理函数示例(基本)
C++常用库函数atoi,itoa,strcpy.strcmp的实现
二级c常用函数总结(1)
sizeof()用法汇总
字符串处理函数大全
求字符串长度
strcpy_s strcat_s的用法
字符数组和字符串的sizeof( )和strlen()
浙江传媒学院C语言程序设计期终考试A卷
C语言常用函数名及用法
C语言中的sizeof的理解
strcmp()函数的使用问题
strcat和strcpy函数
OC常用函数