Với đề sau:Viết chương trình kiểm tra ‘‘hello’’ có trong xâu s hay không*?(không phân biệt chữ hoa và chữ thường)
Vấn đề cần quan tâm ở đây là tìm kiếm chuỗi trong chuỗi.
Thuật toán dưới đây sẽ duyệt chuỗi, gặp chữ 'h' hoặc 'H' sẽ copy 5 ký tự tiếp theo vào mảng tạm , sau đó so sánh với "hello".
Vấn đề thứ 2 là không phân biệt hoa thường. ở đây dùng strupr(); --> chuyển về viết hoa để so sánh.
Mã:
#include<iostream>
#include<string.h>
#include<cstdio>
using namespace std;
main()
{
char a[50],b[6],d[6]="HELLO";
cout<<"\nNhap chuoi: ";
gets(a);
int slen=strlen(a);
for(int i=0;i<slen-4;i++)
{
if(a[i]=='h'||a[i]=='H')
{
int k=i;
for(int j=0;j<5;j++)
{
b[j]=a[k];
k++;
}
}
if(strcmp(b,d)==0)
break;
}
strupr(b);
if(strcmp(b,d)==0)
cout<<"\nCo";
else
cout<<"\nKhong";
}
Thuật toán mới chỉ giải quyết được vấn đề, song vẫn chưa tối ưu lắm.
--> cần một thuật toán tối ưu hơn ?