-
18-05-2014, 04:51 PM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Bài tập mã hóa xâu kí tự gặp lỗi logic lạ
Mình có làm 1 bài tập mã hóa kí tự kiểu nhảy k bước trong mã ASCII vd "abc xyz" nhảy 2 thì thành "cde zab", những kí tự không phải chữ cái thì giữ nguyên. code mình xong, hoạt động bình thường nhưng có 1 lỗi làm mình thắc mắc.
Mã:#include <stdio.h> #include <conio.h> #include <string.h> int main() { char s1[200],s2[200]; int i,t; printf("nhap xau can ma hoa: "); gets(s1); printf("nhap buoc nhay: "); scanf("%d",&t); for (i=0;i<strlen(s1);i++) { if (s1[i]<65||(s1[i]>90&&s1[i]<97)||s1[i]>122) s2[i]=s1[i]; //tuong duong !isalpha(s1[i]) else if (s1[i]+t>122||(s1[i]+t>90&&s1[i]<=90)) s2[i]=s1[i]+t%26-26; /eu xoay vong else s2[i]=s1[i]+t%26; /hay t buoc } s2[i];/eu thay s2[i]=0 thi dung printf("chuoi ma hoa: \"%s\"",s2); getch(); return 0; }
Nguyên nhân có thể là do vấn đề kí tự kết thúc xâu s2[200]. Nếu khởi tạo s2[200]={0} thì code cũng hoàn toàn đúng. Thế nhưng tại sao code lại chỉ sai với những đầu vào như vậy? Mong mọi người giải đáp.
- - - Nội dung đã được cập nhật ngày 18-05-2014 lúc 09:51 AM - - -
Tiện đây mình cũng hỏi luôn là khi khởi tạo mảng kí tự (xâu), nếu không khởi tạo giá trị ban đầu thì các phần tử của xâu chứa giá trị null hay giá trị bất kì trong khoảng nào?View more random threads:
- Random trong C++
- truyền dữ liệu từ datagrid view của 1 form sang textbox,combobox,checkbox.. của 1 form khác
- tạo menu lựa chọn chức năng
- Đếm số lần xâu 1 xuất hiện trong xâu 2.
- Bắt đầu học lập trình hướng đối tượng
- cách xuất tổng học viên
- lỗi khi khai báo float
- Khẩn cấp về hàm chèn node trong cây nhị phân tìm kiếm
- Lỗi dùng delete và new trong C++?
- Lỗi khi nhập mảng vào hàm!! Giúp mình với
-
18-05-2014, 05:05 PM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
chuỗi trong C là mảng ký tự kết thúc bằng ký tự '\0', ko phải đơn thuần là mảng ký tự.
vd "hello" ko phải là mảng {'h', 'e', 'l', 'l', 'o'} mà là mảng {'h', 'e', 'l', 'l', 'o', '\0'}
-
18-05-2014, 06:01 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nhưng tại sao chỉ với những chuỗi có độ dài 8,16,24,32 mới bị (40 cũng không bị).
-
18-05-2014, 06:07 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
http://ideone.com/G9vvbs
chuỗi "hello" 5 chữ thì chương trình cũng có chạy đâu?
nếu thêm dòng s2[i] = '\0'; thì in ra bthg.
bạn chạy thử bao nhiêu lần rồi @.@ Hay là bật nhiều chương trình khác lên rồi chạy lại xem sao. Có lẽ là tùy thuộc vào giá trị trên stack mà nó trùng mấy số ngẫu nhiên thôi...
nhap xau can ma hoa:
dai hoc bach khoa ha noi
nhap buoc nhay: 2
chuoi ma hoa:
"fck jqe dcej mjqc jc pqk"
nhap xau can ma hoa:
12345678
nhap buoc nhay: 2
chuoi ma hoa:
"12345678cÉn╣■⌂"
hên xui thôi [IMG]images/smilies/online.gif[/IMG] vd ở trên thì ký tự thứ 25 ngẫu nhiên mang giá trị 0, còn ở dưới thì ký tự thứ 9 ngẫu nhiên mang giá trị khác 0 nên nó in ra 1 đống "ký tự" phía sau cho tới tầm ký tự 15 thì có giá trị là 0 nên dừng.
-
19-05-2014, 08:11 AM #5
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Uhm, mình test lại thì đúng là hên xui thật, do s2[i] nhận giá trị ngẫu nhiên.
NGUỒN SỈ ÁO KHOÁC DENIM NỮ TPHCM CHẤT LƯỢNG CAO Bạn muốn nhập sỉ áo khoác denim nữ để bắt đầu việc buôn bán Online phong cách nhưng lại chưa có kinh nghiệm, muốn sắm xưởng sỉ xống áo vừa có thể giải...
Xưởng sỉ áo khoác jeans denim giá...