转义字符
转义字符串(Escape Sequence)也称字符实体(Character Entity)。
转义无非是两种情况:1:将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。2:用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。
转义字符表
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符”\’ | 092 |
\’ | 代表一个单引号(撇号)字符 | 039 |
\” | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NULL) | 000 |
\ooo | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
\0 | 空字符,特例转义字符,表示取值为0的字符 | 不计算在字符个数中 |
很长的常量字符串表示方法
char letter[] = {"abcedfghijklm\
nopqrstuvwxyz"};
char letter[] = {"abcdefghijklm""nopqrstuvwxyz"};
\两种行续接方法。
二分查找算法
目标:在一个包含n个元素的数组M中查找元素x。
该算法假定数组M按照递增顺序存储。
步骤一: 设定low为0,high为n-1。
步骤二: 若low>high,则x不在M中,算法终止。
步骤三: 设定mid=(low+high)/2。
步骤四: 若M[mid] < x,设定low为mid+1,返回步骤二。
步骤五: 若M[mid] > x,设定high为mid-1,返回步骤二。
步骤六: 若M[mid ]= x,算法结束。
字符操作
一般字符串都有其对应的ASCⅡ码作为对应整型数值,所以字符的比较实际上为字符所对应的ASCⅡ码数值的比较。
通过该方式的原理可以写一个字符串转换为对应的整数的程序。
经典程序
用二分查找算法设计一个词典查找程序
#include<stdio.h>
/*定义一个全局变量结构体,用于保存单词及其定义*/
struct entry
{
char word[15];
char definition[50];
};
/*此函数比较两个字符串*/
int compareString(const char w1[], const char w2[])
{
int i = 0, answer;
while (w1[i] == w2[i] && w1[i] != '\0' && w2[i] != '\0')
i++;
if (w1[i] < w2[i])
answer = -1; /* w1 < w2 */
else if (w1[i] > w2[i])
answer = 1; /* w1 > w2 */
else
answer = 0; /* w1 = w2 */
return answer;
}
/*此函数用二分查找算法在词典中查找某个单词*/
int lookup(const struct entry dictionary[], const char search[], const int entries)
{
int low = 0;
int high = entries - 1;
int mid, result;
int compareString(const char w1[], const char w2[]);
while (low <= high)
{
mid = low + high / 2;
result = compareString(dictionary[mid].word, search);
if (result == -1)
low = mid + 1;
else if (result == 1)
high = mid - 1;
else
return mid; /*找到单词*/
}
return -1; /*没找到单词*/
}
/*词典主程序 entry:条目*/
int main(void)
{
const struct entry dictionory[100] =
{ {"apple","苹果"},{"banana","香蕉"},{"orange","橘子"},{"starwberry","草莓"}
};
int entries = 4;
char word[15];
int entry;
int lookup(const struct entry dictionary[], const char search[], const int entries);
printf("Enter Word: ");
scanf_s("%14s", &word,14);
entry = lookup(dictionory, word, entries);
if (entry != -1)
printf("%s\n", dictionory[entry].definition);
else
{
printf("Sorry,the word %s is not in this dictionary.\n", word);
}
system("pause");
return 0;
}
PS
scanf与scanf_s函数的区别
char buffer[128];
scanf("%127s", buffer); // 安全
scanf_s("%127s", buffer, 128); // 安全
scanf("%s", buffer); // 不安全
scanf_s("%s", buffer, 128); // 安全,当输入过长时能调用报错函数