giúp mình bài tập c này với

  • Thread starter Thread starter Drmar
  • Ngày gửi Ngày gửi

Drmar

Youtube Master Race
Tham gia ngày
30/11/08
Bài viết
9
Reaction score
0
write a program to accept a string and find out if it is a palindrome
 
đây là code mình viết
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

void main(){
char s[50];
int i, d, n, j;
printf("\nNhap chuoi : ");
scanf("%c", s);

d = strlen(s);
n = d/2;
for(i = 0, j = d ; i < n; i++ , j--)
{
if(s == s[j])
printf("\npalindrome");
}
printf("\nnot palindrome");
}

ko biết sai chổ nào xin các pro chỉ ra giúp
 
Palindrome nghĩa là gì?

-Thêm dòng break ra ngoài vòng lặp.
 
chuỗi palindrome là một chuỗi đối xứng, đọc xuôi = ngược
đầu tiên là bỏ cái
Mã:
{
if(s[i] == s[j])
printf("\npalindrome");
}
đi
thay bằng
Mã:
if (s[i]!=s[j])
{printf("NO");
 return;
}
cái ngoài vòng lặp thì ghi là YES
cái thứ 2 nữa là thay "%c" bằng "%s"

ko thì xem code của tớ, đọc vào và in ra file(quen rồi, đọc ghi = màn hình thấy hơi khó chịu:D thông cảm nhé)
Mã:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *f;
char s[50];

void open()
{int i,j;
f = fopen("sample.inp","rt");
fscanf(f,"%s",s);
fclose(f);
}


void process()
{ int i,j;
  f = fopen("sample.out","wt");
  for(i = 0,j = strlen(s)-1;i<=(strlen(s)-1)/2; i++,j--)
  if (s[i]!=s[j])
  {fprintf(f,"NO");
   fclose(f);
   return;
  }  
  fprintf(f,"YES");
  fclose(f);
}

void main()
{ open();
 process();

}
 
thank mấy bác giờ mình đã hiểu thuốc fugaca zit trừ g\iun như thế nào gồi
.
___________Auto Merge________________

.
ah cái code của nhatanh minh ko hỉu cai :
FILE *f;
f = fopen("sample.inp","rt");
fscanf(f,"%s",s);
fclose(f);
mấy cái này co tác dung gì
xin chỉ giáo
 
cái đấy là đọc dữ liệu vào từ file, có gì lạ đâu:))
 
người ta chưa học nên thấy lạ;))..............
 
đây là code mình viết
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

void main(){
char s[50];
int i, d, n, j;
printf("\nNhap chuoi : ");
scanf("%c", s);

d = strlen(s);
n = d/2;
for(i = 0, j = d ; i < n; i++ , j--)
{
if(s == s[j])
printf("\npalindrome");
}
printf("\nnot palindrome");
}

ko biết sai chổ nào xin các pro chỉ ra giúp

Bài này bạn còn sai nhiều lỗi lắm:
1.scanf("%c", s): Nếu dùng %c thì chỉ đọc được 1 kí tự thôi,với lại dùng scanf phải có &.Nhưng nếu dùng scanf("%s", &s) thì nếu chuỗi có khoảng trắng bạn sẽ không đọc được khoảng trắng.Tốt nhất nên dùng gets(s).
2.d = strlen(s);Nếu d= độ dài chuỗi thì s[d] sẽ bằng NULL.
for(i = 0, j = d ; i < n; i++ , j--) nên sửa lại là for(i = 0, j = d -1; i < n; i++ , j--)
3.Giả sử nếu bạn đã sửa 2 lỗi trên thi chương trình trên vẫn sai và kết quả là bạn sẽ xuất ra
"palindrome" rất nhiều lần và cuối cùng là "not palindrome".
Đoạn sau tốt nhất nên sửa như vầy:
i = 0, j = d -1;
while(i<j&&s==s[j])
{
i++;
j--;
}
if(i>=j)
printf("\npalindrome");
else
printf("\nnot palindrome");

P/s:Có sai sót gì xin chỉ dạy
 
Write a C program to reverse a character aray using pointer
Đây là code mình viết
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

void main(){
char *p;
char temp, n;
int i, j;

printf("\nEnter your text : ");
scanf("%s", n);
printf("\nYour text is : %s", n);

p = (char*)malloc(n*sizeof(char));

for(i = 0 ; i < strlen(n)-1 ; i++)
{
for(j = i+1 ; j < strlen(n) ; j++)
{
temp = *(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}

free(p);

for(i = 0 ; i < strlen(n) ; i++)
{
printf("The text is reversed is : %s",*(p+i));
}
getch();
}
Khi chạy ct thi vẫn ra file exe nhưng mà báo đống lỗi và run cai exe đó thi no lai bao debug
khi mình thay cái strlen(n) = strlen (p) thi chay ko báo lỗi nhung cũng bị debug
Bạn nào biết giai thích hộ mình , và mình nên sữa như thế nào
 
Chưa chạy thử nhưng mà thấy bạn khai báo char n mà lại dùng scanf("%s", n);
Mà in ra xâu đảo ngược cũng không cần phức tạp như thế:
Mã:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void main()
  { clrscr();
    char *n;
    int i;

    printf("\nEnter your text : ");
    gets(n);

    printf("\nYour text is : %s\n", n);

    printf("The text is reversed is: ",n);

    for(i = strlen(n) ; i >= 0 ; i--)
       printf("%c",*(n+i));

    getch();
  }
Hình như bài trên không đúng yêu cầu, bài đảo ngược chuỗi nè:
Mã:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void main()
{ clrscr();
char *n,temp;
int i,j;


printf("\nEnter your text : ");
gets(n);
printf("\nYour text is : %s\n", n);
for(i=0,j=strlen(n)-1;i<(strlen(n)/2);i++,j--)
	{ temp=*(n+i);
	  *(n+i)=*(n+j);
	  *(n+j)=temp;
	}

printf("The text is reversed is: %s",n);

getch();
}
 
Write a C program to reverse a character aray using pointer
Đây là code mình viết
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

void main(){
char *p;
char temp, n;
int i, j;

printf("\nEnter your text : ");
scanf("%s", n);
printf("\nYour text is : %s", n);

p = (char*)malloc(n*sizeof(char));

for(i = 0 ; i < strlen(n)-1 ; i++)
{
for(j = i+1 ; j < strlen(n) ; j++)
{
temp = *(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}

free(p);

for(i = 0 ; i < strlen(n) ; i++)
{
printf("The text is reversed is : %s",*(p+i));
}
getch();
}
Khi chạy ct thi vẫn ra file exe nhưng mà báo đống lỗi và run cai exe đó thi no lai bao debug
khi mình thay cái strlen(n) = strlen (p) thi chay ko báo lỗi nhung cũng bị debug
Bạn nào biết giai thích hộ mình , và mình nên sữa như thế nào

1.Có lẻ bạn chưa hiểu thế nào la chuỗi thế nào là kí tự
-Chuỗi là 1 mảng kí tự
char temp, n;
scanf("%s", n);
nếu bạn muốn đọc chuỗi thì phải khai báo char *n hoặc char n[200]
2.strlen(n) = strlen (p)
hàm strlen() là 1 hàm có giá trị trả về với lại chỉ có biến mới đuợc gán giá trị thôi
 
Mình dùng scanf() là để có thể dung thằng malloc để xin cấp đủ vùng bộ nhớ chứ không , theo minh hiểu thi nếu dùng gets() thì mình đâu thể dùng malloc()
và theo mình nghir thi nếu dùng gets() thì chắc phải thêm 1 biến để bắt khai báo số kí tự cần nhập để có thể xin vùng nhớ vừa đủ
Ko bít mình hiểu vậy có đúng không
Cám ơn mấy bạn đã bỏ chút thời gian giup đỡ mình::)
.
___________Auto Merge________________

.
mình khai báo char n va *p sau đó minh mới gán cho
p = (char*)malloc(n*sizeof(char));
 
Cái này thì tớ cũng không rõ lắm.
Nhưng mà thế này, cậu khai báo char n; tức là n chỉ là một kí tự mà scanf("%s", n); là dùng để nhập cho 1 chuỗi, ngoài ra scanf("%s", n); chỉ nhập được một chuỗi không có space, tức là nếu cậu nhập 1 chuỗi có space thì nó chỉ lấy được từ đầu tiên.
Còn để nhập đúng 1 chuỗi thì phải dùng gets(); sau này lên C++ thì có thêm cin.get();
gets(); thì không cần xin vùng nhớ đâu, cứ thế mà nhập là được.
mình khai báo char n va *p sau đó minh mới gán cho
p = (char*)malloc(n*sizeof(char));
mà nếu cậu muốn thế này thì phải cho n là int rồi đặt nó là số kí tự tối đa của chuỗi.
 
cám ơn bạn ::)::)::)::)::)::)::)::)::)::)::)::)
 
Write a C program to store the names and scores of 5 students inh a structure aray. Sort the structure aray in descending order of score . Display name of 3 student have high score.
Mình ko biết cách hiển thị tên vì đề bắt mình sắp xếp điểm
Mong các pro hướng dẫn giúp thanx
 
Back
Top