การประมวลผลสายอักขระ (String)

advertisement
(String Processing)
Outline
 ทบทวน String
 การประมวลผลสายอักขระ (String Processing)
 Pattern Matching
 Encryption/Decryption
 Compression
ทบทวน String
การประกาศตัวแปรเพือ่ เก็บข้อความ
การรับและการแสดงผลข้อความ
การกาหนดค่าให้กบั ตัวแปรเก็บข้อความ
ฟงั ก์ชนั ทีใ่ ช้กบั ข้อความและอักขระ
การประกาศตัวแปรเพื่อเก็บข้ อความ
 รูปแบบ
char ชือ่ ตัวแปร[จานวนอักขระ]
โดยที่จำนวนอักขระต้องมำกกว่ำจำนวนอักขระที่เก็บจริ ง 1 ช่อง เพรำะช่องสุ ดท้ำยต้องเก็บ
อักขระ NULL ซึ่งเขียนแทนด้วย ‘\0’ เพื่อบอกให้ตวั แปลภำษำรู้วำ่ เป็ นข้อควำม
 ตัวอย่าง
char name[10];
หมำยถึง ตัวแปรชื่อ name เก็บข้อควำมยำว 9 อักขระ
char color[ ];
หมำยถึ ง ตัวแปรชื่ อ color เก็บข้อควำมโดยไม่ กำหนดขนำด ซึ่ งในกรณี น้ ี ตวั
แปลภำษำจะกำหนดขนำดให้เท่ำกับจำนวนอักขระบวก 1
การรับข้ อมูล
การรับข้อความโดยใช้ฟังก์ชนั scanf()
 รูปแบบ:
scanf (“%s”, ชื่อตัวแปร)
 ตัวอย่าง
#include <stdio.h>
char massage[ 20];
void main ( )
{
scanf (“%s”, message);
printf (“%s”, message);
}
การรับข้ อมูล
รับข้อมูลทีละตัวอักษรด้วยฟังก์ชนั getchar ( )
 การทางาน>> เมื่อผูใ้ ช้กรอกตัวอักษรแล้ว จะต้องกดปุ่ ม Enter โปรแกรมจึงจะกลับไป
ทำงำนต่อ โดยอักขระที่ผใู้ ช้กรอก จะปรำกฏขึ้นมำให้เห็นบนหน้ำจอด้วย
 รูปแบบ:
ชื่อตัวแปร = getchar()
 ตัวอย่าง
#include <stdio.h>
void main ( )
{
char ch;
ch = getchar();
}
printf("You type a character is ...%c \n",ch);
การรับข้ อมูล
รับข้อความด้วยฟังก์ชนั gets ( )
 รูปแบบ:
gets(ชื่อตัวแปร)
 ตัวอย่าง
#include <stdio.h>
void main ( )
{
char str[20];
gets(str);
}
printf("You type a string is ...%s \n",str);
การแสดงผลลัพธ์
การแสดงผลข้อความโดยใช้ฟังก์ชนั printf
 รูปแบบ:
printf (“%s”, ชือ่ ตัวแปร);
 ตัวอย่าง
#include <stdio.h>
void main ( )
{
char str[20];
}
gets(str);
printf("You type a string is ...%s \n",str);
การแสดงผลลัพธ์
การแสดงผลทีละตัวอักษรโดยใช้ฟังก์ชนั printf
 รูปแบบ:
printf (“%c”, ชือ่ ตัวแปร);
 ตัวอย่าง
#include <stdio.h>
void main ( )
{
char str[20];
}
gets(str);
for(i=0;i<20;i++)
printf("You type a string is ...%c \n",str[i] );
การแสดงผลลัพธ์
การแสดงผลทีละตัวอักษรด้วยฟังก์ชนั putchar()
รูปแบบ:
putchar (argument)
argument : ตัวแปร, ค่าคงที่ , ฟงั ก์ชนั
ตัวอย่าง
#include <stdio.h>
void main ( )
{
char ch;
ch = ‘A’;
}
putchar(ch);
การแสดงผลลัพธ์
การแสดงผลข้อความด้วยฟังก์ชนั puts()
รูปแบบ:
puts(string)
เมือ่ string คือตัวแปรทีเ่ ก็บข้อความหรือข้อความทีอ่ ยูใ่ ต้เครื่องหมาย “ ”
ตัวอย่าง
#include <stdio.h>
char message[ ] = “C Language”;
void main ( )
{
}
puts (message);
puts (“Easy and Fun”);
ผลการรัน
C Language
Easy and Fun
ตัวอย่างโปรแกรม
#include<stdio.h>
char x [30];
void main ( )
{
printf (“Enter your name :”);
gets(x);
printf (“Your name :%s\n”, x);
}
ผลลัพธ์
Enter your name : manee dee
Your name : manee dee
การกาหนดค่าให้ กบั ตัวแปรเก็บข้ อความ
Example
#include<stdio.h>
void main ( )
{
char mass[11] = “C Language”;
char book[4] = {‘A’, ‘B’, ‘C’, ‘\0’};
printf (“%s\n”, mass);
printf (“%s\n”, book);
printf (“%c\n”, mass[3]);
}
ผลการรัน
C Language
ABC
a
ฟั งก์ชนั ที่ใช้ กบั ข้ อความและอักขระ
#include <string.h>
ชื่อฟังก์ชัน
strcpy( )
strcat( )
รู ปแบบ
strcpy(str1,str2)
strcat(str1,str2)
strlen( )
strcmp()
strlen(s)
strcmp(str1,str2)
ความหมาย
คัดลอกข้อมูลจำก str2 ไปยัง str1
ใช้เชื่อมต่อข้อควำม str1 กับ str2 เข้ำด้วยกัน
และเก็บผลลัพธ์ไว้ใน str1
ใช้หำควำมยำวของข้อควำม s
เปรี ยบเทียบข้อควำม str1 กับ str2
ฟั งก์ชนั ที่ใช้ กบั ข้ อความและอักขระ
#include <ctype.h>
ชื่อฟังก์ชนั
รู ปแบบ
ควำมหมำย
tolower( )
tolower(ch) เปลี่ยนตัวอักษรจำกตัวใหญ่ให้เป็ นตัวเล็ก
toupper( )
toupper(ch) เปลี่ยนตัวอักษรจำกตัวเล็กให้เป็ นตัวใหญ่
ตัวอย่ำงโปรแกรมกำรใช้ฟังก์ชนั ของ string
#include<stdio.h>
#include<string.h>
if (res>0)
{
printf("greater\n");
strcpy(temp,name1);
strcpy(name1,name2);
strcpy(name2,temp);
int main()
{
char name1[10], name2[10], temp[10];
int res;
printf("enter 2 string : ");
scanf("%s %s",name1,name2);
printf("%s %s\n",name1,name2);
}
else if (res<0)
printf("less\n");
else // res == 0
{
// cannot use like this
//name1 = "dararat";
printf("same and length = ");
printf("%d\n",strlen(name1));
}
return 0;
res = strcmp(name1,name2);
}
Don’t Sleep Yet…
String Processing
 Pattern Matching
 Encryption/Decryption
 Compression
Pattern Matching
 given a string of n characters called
text (T) ,and a string of m (m<=n)
characters called pattern (P)
 find a substring of the text that match
the pattern
Pattern Matching Algorithms
Brute-Force
Boyer-Moore
Knuth-Morris-Pratt
Pattern Matching Algorithms
Input: An array T[n] of n characters
representing a text and an array P[m] of m
character representing a
patterm
Output: The index of the first character in
the text that starts a matching substring or 1 if the search is unsuccessful
Brute-Force algorithm
Algorithm
for i  to n-m do
j 0
while j< m and P[j] = T[i+j] do
j j+1
if j = m return i
return -1
Brute-Force algorithm
Example 1
T = “abacaabaccabacababb”
P = “abacab”
abacaabaccabacababb
abacab
abacab
Result = “match”
abacab
abacab
….
abacab
27 comparisons
Brute-Force algorithm
Example 2
T = “a pattern matching algorithm”
P = “algor”
apattern matching algorithm
algor
algor
a lgor
algor
…
Result = “match”
algor
? comparisons
Boyer-Moore algorithm
Algorithm
 create a lookup table from P
 เช่น T = “abacaabadcabacababb”
P = “abacab”
cha
a
b
c
d
Last(cha)
4
5
3
-1
***Last(cha) = last position of the character in P
Boyer-Moore algorithm
Algorithm (ต่อ)
 compare from right to left 1-by-1
 if not equal at position i in T,

if Ti is in lookup table
n
= |last(Ti)-last(Pi)|
 shift

comparison to the next n
location of T
if Ti is not in lookup table
 shift
comparison to the next m (ex. m=6)
location of T
Boyer-Moore algorithm
Example 1
T = “abacaabadcabacababb”
P = “abacab” (m = 6)
-------------------------------------------------------------------------abacaabadcabacababb
cha
a
b
c
d
abacab
Last(cha)
4
5
3
-1
abacab
abacab
abacab
13 comparisons
abacab
abacab
Boyer-Moore algorithm
Example 2
T = “a pattern matching algorithm”
P = “algor” (m = 5)
-----------------------------------------------------------------a pattern matching algorithm
algor
algor
algor
algor
algor
cha
a
l
g
o
r
Last(cha)
0
1
2
3
4
? comparisons
Boyer-Moore algorithm
แบบฝึ กหัด
T = “a pattern matching algorithm”
P = “rithm” (m = 5)
------------------------------------------------------------------------cha
Last(cha)
Encryption/Decryption
 Cryptographic computations
encryption/decryption , digital signatures
 To support secure communication over the
Internet – using cryptographic computations for
information security services
Encryption/Decryption
 Before sending text, the original text – called
plaintext , is encrypted into an unrecognizable
string – called ciphertext
 After receiving the ciphertext, it is decrypted
back to the plaintext
Plaintext
encryption
decryption
Ciphertext
Encryption/Decryption
 Basic techniques : Substitution , Transposition ,
Bit manipulation
 the essential thing for each method is the secret
key
 Well-known Algorithms
 DES (Data Encryption Standard)
 RSA (Rivest-Skamir-Adleman)
 Knapsack
Encryption/Decryption
Example
Substitution (n = 4)
 Transposition (3x6)
 Bit manipulation (b = 3)

Compression
 given a string X (ascii, unicode), encode into a
small binary string Y
 Huffman coding algorithm – based on character
frequency to construct a binary tree , uses greedy
method
Compression
Eample
“a fast runner need never be afraid of the dark”
 frequency of each character
char. a b d e f h i k n o r s t u v
freq. 9 5 1 3 7 3 1 1 1 4 1 5 1 2 1 1
a = ‘010’
r = ‘011’
e = ‘100’
d = ‘1010’
Compression
Eample (ต่อ)
46
0
 Huffman tree
1
27
19
0
12
10
9
0
a
15
1
0
1
e
r
5
1
5
0
7
5
1
0
1
d
…
1
3
…
การบ้ าน
 Knuth-Morris-Pratt algorithm
Download