Kiểm tính đúng sai của chuỗi, đánh giá chuỗi

Đề : Giả sử họ và tên đầy đủ gồm 2-5 từ, mỗi từ là dãy liên tiếp các chữ cái tiếng Anh, trong đó chữ đầu tiên viết hoa, còn lại chữ thường. Viết chương trình kiểm tra chuỗi nhập vào có phải là họ và tên?

Bài em đã làm :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 90% chương trình dựa trên bài đếm từ.
int main()
{
 label:
 {
    char s[1000];
    printf("\n Nhap Ho va Ten:");
    gets(s);
    int dem=0;
    int flat=0; //khai biến cờ để xác định tên hợp lệ
    int i;
     if(s[0]!=' ')
        {
            dem++;
        }
     for(i=0;i<strlen(s);i++)
        {
         if(s[i]==' '&&s[i+1]!= ' '&&s[i+1]!='\0')
          {
            dem++;
          }
        }
         if(dem<2||dem>5) // điều kiện đầu, Họ và Tên có 2-5 từ
          {
            printf("Ho va Ten khong hop le !!!");
            printf("\nHo va Ten co 2 den 5 tu.");
            goto label; // bắt lặp cho đến khi nhập đúng
          }
          else
          {
            for(i=0;i<strlen(s);i++)
             {
                if((s[i]>64&&s[i]<91)&&(s[i+1]!=s[i]))
                 {
                     flat=1;
                 }
             }

          }

    if(flat==1)
     {
      printf("Ten hop le!");
      printf("\nTen ban la: %s",s);
     }
 }
 printf("\nCreated by HoangVanThanh,CT19A,KMA");

Đề bắt buộc p đánh: Hoàng Văn Thành ===> thì chương trình báo nhận
Nhưng khi đánh: HOanG VaN ThAnH vẫn nhận.

Mọi người đi qua cho em chút ý tưởng với ạ

Khi gặp kí tự ko đúng thì phải rời vòng lặp ngay và luôn. Suy nghĩ theo state machine sẽ dễ hơn.

p/s: thế này ổn ko nhỉ: /^[A-Z][a-z]{1,4}$/

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?