Chuỗi trong C | Cách nhập chuỗi có dấu cách trong C

This entry is part 54 of 69 in the series

85 / 100

This entry is part 54 of 69 in the series Học C Không Khó

Chúng ta sẽ cùng nhau bước sang phần 5 của khóa học lập trình C, bài đầu tiên chúng ta học là cách nhập xuất chuỗi trong C. Trong bài này chúng ta sẽ làm rõ sự khác nhau giữa mảng và chuỗi, cách khởi tạo và khai báo chuỗi. Cách để nhập chuỗi có khoảng trắng và một số lưu ý khi làm việc với chuỗi.

Cách hoạt động của chuỗi trong C

Chuỗi trong C?

Trong ngôn ngữ lập trình C, chuỗi là một tập hợp các ký tự (char) được lưu trữ trên các ô nhớ liên tiếp và luôn luôn có 1 ký tự null\0 báo hiệu kết thúc chuỗi.

012

intc[]=” c string “;

Ví dụ, khi khai báo và khởi tạo chuỗi theo cách trên, trình biên dịch sẽ tự thêm 1 ký tự null \0 vào cuối.

Bài 56. Chuỗi trong C

Như vậy, nếu bạn muốn khai báo chuỗi để lưu n ký tự, bạn cần mảng ký tự có kích thước tối đa ít nhất là n+1.

Cách khởi tạo giá trị cho chuỗi

Bạn hoàn toàn có thể khởi tạo giá trị cho chuỗi theo 1 trong những cách dưới đây :

012345

charc[]=” abcd “;

charc[50]=” abcd “;

charc[]={‘ a ‘,’ b ‘,’ c ‘,’ d ‘,’ \ 0 ‘};

charc[5]={‘ a ‘,’ b ‘,’ c ‘,’ d ‘,’ \ 0 ‘};

Nhưng không được làm như sau :

012

charc[5]=” abcde “;

Bởi vì chuỗi của bạn có 5 ký tự cộng thêm 1 ký tự \0 là 6, sẽ bị vượt quá kích thước tối đa.

Cách nhập xuất chuỗi trong C

Bạn có thể sử dụng hàm scanf() để nhập chuỗi không có chứa dấu trắng (dấu cách, dấu tab, dấu \n)  và hàm printf() để xuất chuỗi.

012345678910

#include

intmain()

{

charname[20];

printf(” Enter name : “);

scanf(” % s “,name);

printf(” Your name is % s. “,name);

return0;

}

Kết quả chạy :

0123

Entername:HieuNguyenVan

YournameisHieu.

Nếu bạn để ý thì hàm scanf() dùng dấu trắng để nhập nhiều input đồng thời. Do đó bạn chỉ nên dùng hàm scanf() khi nhập chuỗi viết liền.

Cách nhập chuỗi có khoảng trắng

Để nhập chuỗi bao gồm cả dấu trắng, bạn nên sử dụng hàm fgets() để nhập. Tương ứng, bạn cũng có thể in ra chuỗi bằng hàm puts().

0123456789101112

#include

intmain()

{

charname[30];

printf(” Enter name : “);

fgets

(

name,sizeof(name),stdin);/ / read string

/ / gets ( name ) ; / / không nên dùng

printf(” Name : “);

puts(name);/ / display string

return0;

}

Kết quả :

0123 Enter name : Hieu Nguyen VanName : Hieu Nguyen Van

Lưu ý:

  • Bạn hoàn toàn có thể dùng hàm printf() để xuất chuỗi có khoảng trắng. Sự khác biệt là hàm puts() sẽ in thêm 1 dấu \n ở cuối chuỗi.
  • Hàm gets() cũng có thể dùng để nhập chuỗi theo cách ở dòng 7 (đã comment lại) trong đoạn code trên. Tuy nhiên hàm này không còn được khuyến khích được sử dụng vì nó không chỉ định kích thước tối đa của chuỗi => Có thể gây ra tràn bộ nhớ làm lỗi chương trình.

Chương trình không cho nhập chuỗi?

Nếu bạn làm việc với chuỗi mà xảy ra hiện tưởng chương trình bỏ qua bước nhập chuỗi của bạn thì đây là vấn đề. Hiện tượng này xảy ra do trước khi nhập chuỗi bạn có nhập vào 1 biến số nào đó; Điều đó khiến bộ nhớ đệm còn lưu lại ký tự \n.

Để khắc phục vấn đề này, bạn cần dùng hàm fflush(stdin) để xóa bộ nhớ đệm khi dùng gets() và dùng getchar() ở giữa các lần sử dụng scanf() kết hợp với fgets() nhé.

0123456789101112131415161718192021222324

/ / Nếu dùng fgets ( )

#include

intmain(){

intage;

charname[30];

printf(” \ nNhap tuoi : “);scanf(” % d “,và age ) ;

getchar();/ / đọc ký tự ‘ \ n ‘

printf(” \ nNhap ten : “);fgets(name,sizeofname,stdin);

printf(” % s – % d “,name,age);

}

/ / Nếu dùng gets ( )

#include

intmain(){

intage;

charname[30];

printf(” \ nNhap tuoi : “);scanf(” % d “,và age ) ;

fflush(stdin);/ / đọc ký tự ‘ \ n ‘

printf(” \ nNhap ten : “);gets(name);

printf(” % s – % d “,name,age);

}

Kết quả chạy :

012345 PS G : \ c_cources \ day_56 >. \ NoteFflush. exeNhap tuoi : 30Nhap ten : Nguyen Van Hieu

Nguyen Van Hieu – 30

Bài tập thực hành

Có vô số bài tập thực hành thực tế về chuỗi đang chờ bạn giải tại website Luyện Code của Lập Trình Không Khó. Bạn hoàn toàn có thể thực hành thực tế những bài tập trực tuyến, biết code mình đúng hay sai tại đây .

Tài liệu tham khảo