我们已经知道, 字符串常量是由双引号括起来的字符序列, 例如:
"a string"
就是一个字符串常量, 该字符串中因为字符a后面还有一个空格字符, 所以它由8 个字符序列组成。在程序中如出现字符串常量C 编译程序就给字符串常量按排一存贮区域, 这个区域是静态的, 在整个程序运行的过程中始终占用, 平时所讲的字符串常量的长度是指该字符串的字符个数, 但在按排存贮区域时, C 编译程序还自动给该字符串序列的末尾加上一个空字符'''', 用来标志字符串的结束, 因此一个字符串常量所占的存贮区域的字节数总比它的字符个数多一个字节。
Turbo C中操作一个字符串常量的方法有:
(1). 把字符串常量存放在一个字符数组之中, 例如:
char s[]="a string";
数组s共有9个元素所组成, 其中s[8]中的内容是''''。实际上, 在字符数组定义的过程中, 编译程序直接把字符串复写到数组中, 即对数组s初始化。
(2). 用字符指针指向字符串, 然后通过字符指针来访问字符串存贮区域。当字符串常量在表达式中出现时, 根据数组的类型转换规则, 它被转换成字符指针。因此, 若我们定义了一字符指针cp:
char *cp;
于是可用:
cp="a string";
使cp指向字符串常量中的第0号字符a, 如图7.所示。
cp
┏━━━┓ ┏━┳━┳━┳━┳━┳━┳━┳━┳━┓
┃ ─╂─→ ┃a ┃ ┃s ┃t ┃r ┃i ┃n ┃g ┃┃
┗━━━┛ ┗━┻━┻━┻━┻━┻━┻━┻━┻━┛
图7.
以后我们可通过cp来访问这一存贮区域, 如*cp或cp[0]就是字符a, 而cp[i]或 *(cp+i)就相当于字符串的第i号字符, 但企图通过指针来修改字符串常量的行为是没有意义的。
lieti
【程序96】
题目:计算字符串中子串出现的次数
1.程序分析:
2.程序源代码:
#include "string.h"
#include "stdio.h"
main()
{ char str1[20],str2[20],*p1,*p2;
int sum=0;
printf("please input two stringsn");
scanf("%s%s",str1,str2);
p1=str1;p2=str2;
while(*p1!='''')
{
if(*p1==*p2)
{while(*p1==*p2&&*p2!='''')
{p1++;
p2++;}
}
else
p1++;
if(*p2=='''')
sum++;
p2=str2;
}
printf("%d",sum);
getch();}