C语言入门教程-字符串

[09-12 13:07:55]   来源:http://www.88dzw.com  电路基础   阅读:8255

文章摘要:对于strcpy函数,我们可以如法炮制: strcpy(char s1[],char s2[]){int x;for (x=0; x<=strlen(s2); x++)s1[x]=s2[x];}注意,在for循环中使用<=是很关键的,这样一来复制过程就包含上'0'。一定要复制'0'。否则程序到后面将发生严重的错误,因为字符串失去了结束标志就无法确定其长度。还请注意这段代码的效率很低,这是因为for循环每次都要调用strlen函数。为解决此问题,您可以使用下面的代码: strcpy(char s1[],char s2[]){

C语言入门教程-字符串,标签:电子电路基础,模拟电路基础,http://www.88dzw.com

对于strcpy函数,我们可以如法炮制:

strcpy(char s1[],char s2[])
{int x;for (x=0; x<=strlen(s2); x++)
s1[x]=s2[x];}

注意,在for循环中使用<=是很关键的,这样一来复制过程就包含上'0'。一定要复制'0'。否则程序到后面将发生严重的错误,因为字符串失去了结束标志就无法确定其长度。还请注意这段代码的效率很低,这是因为for循环每次都要调用strlen函数。为解决此问题,您可以使用下面的代码:

strcpy(char s1[],char s2[])
{int x,len;len=strlen(s2);for (x=0; x<=len; x++)
s1[x]=s2[x];}

类似地可以写出指针版本。

strcpy(char *s1,char *s2)
{while (*s2 != '0')
{*s1 = *s2;s1++;
s2++;}}

并进一步化简为:

strcpy(char *s1,char *s2)
{while (*s2)
*s1++ = *s2++;}

只要您愿意,甚至可以写成while (*s1++ = *s2++);。用strcpy将一个长度为120的字符串复制10,000遍,四个版本分别耗时415秒、14.5秒、9.8秒和10.3秒。如您所见,在这里指针明显提升了程序的性能。

从字符串库中strcpy的函数原型可以看出,它被设计为返回一个指向字符串的指针:

char *strcpy(char *s1,char *s2)

多数字符串函数都会返回一个字符串指针作为结果。strcpy返回的是s1的值。

使用指针操作字符串有时会带来明显的速度提升。编写程序前要想一想如何利用指针的这种优势。例如,您要删除某字符串开始处的空格。您可能会将后面的字符前移来覆盖掉前面的空格。其实,您连一个字符也不用移动:

#include
#include

int main()
{char s[100],*p;gets(s);p=s;
while (*p==' ')
p++;printf("%sn",p);return 0;}

这种方法比移动字符要快得多,对于长字符串更是如此。

随着继续学习和阅读更多代码,您会掌握越来越多的字符串操作技巧。勤加练习是关键。

上一页  [1] [2] 


Tag:电路基础电子电路基础,模拟电路基础电路基础