Ace nào tìm giúp mình lỗi bài này với.Mình tìm mãi mà không biết bị lỗi chỗ nào cả
Đề bài là cho một chuỗi gồm các từ giữa các từ là dấu cách hoặc dấu chấm câu ( là các dấu _ , ; : . ) .Yêu cầu: sắp xếp các từ theo độ dài tăng dần và giữa các từ là dấu cách .
#include<conio.h>
#include<stdlib.h>
#include<string.h>
int dau_cham_cau(char s)
{
int fl = 0;
switch (s)
{
case ' ':fl = 1; break;
case '.':fl = 1; break;
case ',':fl = 1; break;
case ';':fl = 1; break;
case '-':fl = 1; break;
case ':':fl = 1; break;
}
return fl;
}
int chia_tu(char *s, char w[][40])
{
char sp[40];
int j = 0, n = 0,
l = strlen(s);
for (int i=0;i<l;i++)
if (!dau_cham_cau(s[i]))
{
sp[j] = s[i];
j++;
}
else
{
sp[j] = '\0';
strcpy(w[n], sp);
n++;
j = 0;
}
return n;
}
void sap_xep(char w[][40], int n, char*new_s)
{
char buf[40];
for (int i = 0; i < n; i++)
{
for (int j=0;j<n-i-1;j++)
{
if (strlen(w[j]) > strlen(w[j + 1]))
{
strcpy(buf, "");
strcpy(buf, w[j]);
strcpy(w[j], w[j + 1]);
strcpy(w[j + 1], buf);
}
}
}
char blank[] = " ";
strcpy(new_s, w[0]);
for (int i = 1; i < n; i++)
{
strcat(new_s, blank);
strcat(new_s, w[i]);
}
}
int main(void)
{
int n;
char s[80], w[40][40];
printf("nhap chuoi\n");
gets(s);
int l = strlen(s);
char * new_s = (char*)malloc(l);
n=chia_tu(s, w);
sap_xep(w,n, new_s);
puts(new_s);
getch();
return 0;
}