字符串运算
- 1. 基本字符串运算
- 求串长
- 串拷贝
- 串比较
- 2. 串的模式匹配
- 布鲁斯-福特算法
- 3. 字符串转换
- 3.1 字符串转换成整数
- 3.2 字符计数
- 3.3 字符行数计数
- 3.4 字符单词计数
通常情况下,字符串存储在一维字符数组中。
1. 基本字符串运算
基本操作:赋值(拷贝)、连接、比较、求串长、求子串等。
求串长
计算给定串中除结束标志字符’\0’之外的字符数目。
int strlen(char *s)
{
int n=0;
while(s[n]!='\0')
n++;
return n;
}
串拷贝
将源串复制给目标串。
strcpy()函数
int strcpy(char *dest,char *src)
{
int i=0;
while(src[i]!='\0'){
dest[i]=src[i];
i++;}
dest[i]='\0';
return dest;
}
串比较
比较第一个不相同的字符,大的那个字符该字符串就大。
int strcmp(char *s1,char *s2)
{
int i=0;
while(s1[i]!='\0'||s2[i]!='\0'){
if(s1[i]==s2[i]) i++;
else return s1[i]-s2[i];
}
return 0;
}
2. 串的模式匹配
串的模式匹配:模式串(或子串)在主串中的定位操作。
布鲁斯-福特算法
此算法为基本的模式匹配算法。其基本思想是从主串的第一个字符起与模式串的第一个字符比较,若相等,则继续逐个字符进行后续比较,否则从主串的第二个字符起与模式串的第一个字符重新开始比较,直至模式串中每个字符依次与主串中的一个连续的字符序列相等时为止,此时称为匹配成功:如果在主串中不存在与模式串相同的子串,则匹配失败。
3. 字符串转换
3.1 字符串转换成整数
int AToI(char s[])
{
int i, n = 0;
for (i = 0;s[i]>='0' && s[i]<='9';++i)
{
n = 10 * n + (s[i] - '0');
}
return n;
}
3.2 字符计数
void CharCountNum()
{
double nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f\n", nc);
}
3.3 字符行数计数
void CharColumnCountNum()
{
int nC, nL = 0;
while ((nC = getchar()) != EOF)
{
if (nC == '\n')
{
++nL;
}
}
printf("%d\n", nL);
}
3.4 字符单词计数
void WordCountNum()
{
int nC; //输入字符
int nCharNum = 0; //输入字符个数
int nL = 0; //记录行数
int nN = 0; //记录单词个数
bool bState = true; //一个单词内的字符不计数
while ((nC = getchar()) != EOF)
{
++nCharNum;
if (nC == '\n')
{
++nL;
}
if (nC == ' '|| nC == '\n' || nC == '\t')
{
bState = true;
}
else
{
if (bState)
{
++nN;
bState = false;
}
}
}
printf("%d %d %d\n", nCharNum, nN, nL);
}