PDA

View Full Version : Hàm viết hoa chữ cái đầu câu. Chỉ chạy được khi file input ngắn!



ngocnghech
05-05-2012, 02:36 PM
Cả nhà ơi góp ý giùm em đoạn code này nha!
Hàm viết hoa chữ cái đầu câu. Ví dụ:
". hôm nay trời đẹp" chuyển thành: ". Hôm nay trời đẹp"
Đây là đoạn code của em:

void upper()
{
FILE* fin = fopen("Input.txt", "r");
FILE* fout = fopen("Output.txt", "w");
char word[WMAXLEN] = "";
char ch;
int len = 0;

while(!feof(fin))
{
ch = fgetc(fin);
if (ch == EOF)
break;
else
{
word[len] = ch;
len++;
}
}
for (int i = 0; word[i] != '\0'; i++)
{
if (word[i] == '.' || word[i] == '?' || word[i] == '!')
{
word[i+2] = toupper(word[i+2]);
}
fputc(word[i], fout);
}
fcloseall();
}
Nếu đoạn văn chỉ 3-4 câu thì chạy ngon lành, còn nhiều hơn thì chương trình báo lỗi!(:-)??
Mong cả nhà chỉ giáo!
Mà em thấy thuật toán của em còn khá chậm! Nếu có thuật toán nào cải tiến hơn mong mọi người chỉ giáo cho em ạ!(:-)w
Cảm ơn cả nhà!

doicanhden
05-05-2012, 04:26 PM
Chạy thử code này xem, đảm bảo nhanh hơn nhiều, vừa đọc vừa xử lý, vừa ghi ra luôn.
P/s: Mới re-code từ code của bạn, chưa chạy thử, bạn chạy xong thì comment lại nhé. :D
P/s 2: Hôm nay, chỗ tôi trời mưa.


void upper()
{
FILE* fin = fopen("Input.txt", "r");
FILE* fout = fopen("Output.txt", "w");

while(!feof(fin))
{
char ch = fgetc(fin);
if (ch == EOF)
break;

if (ch == '.' || ch == '?' || ch == '!')
{
fputc(ch, fout);
do
{
ch = fgetc(fin);
}
while (ch == ' ');

if(ch == EOF)
break;
fputc(' ', fout);
ch = toupper(ch);
}
fputc(ch, fout);
}
fcloseall();
}

ngocnghech
05-05-2012, 04:55 PM
Em mới chạy thử code của bác!
Viết hoa được chữ cái đầu câu nhưng lại xóa mất tiêu mấy dấu (.), (!), (?) và khoảng trắng sau đó bác ơi!
Mong bác chỉ giáo!
Cảm ơn bác nha!

doicanhden
05-05-2012, 05:14 PM
Em mới chạy thử code của bác!
Viết hoa được chữ cái đầu câu nhưng lại xóa mất tiêu mấy dấu (.), (!), (?) và khoảng trắng sau đó bác ơi!
Mong bác chỉ giáo!
Cảm ơn bác nha!
Sorry quên fputc cái dấu câu vào. Code tôi sửa lại ở trên. Mấy khoảng trẳng thừa thì bỏ nó lun.
VD:"aaaaaaaaaa. bbbbbbb" -> "aaaaaaaaaa. Bbbbbbb"
Èo, quên mất bạn viết hoa dòng đầu tiên luôn đi.

thai_thinh
05-05-2012, 08:12 PM
void Upper()
{
FILE* f = fopen("input.txt","r");//khong xu ly truong hop flie rong.
if(!f)return;
FILE* o = fopen("out.txt","w");
char s[100];
while(!feof(f))
{
char kt;
fscanf(f,"%s",s);
fscanf(f,"%c",&kt);
if(s[0]>='a'&&s[0]<='z')
s[0] += 'A'-'a';
fprintf(o,"%s%c",s,kt);
while(!feof(f))
{
fscanf(f,"%s",s);
fscanf(f,"%c",&kt);
fprintf(o,"%s%c",s,kt);
if(s[strlen(s)-1]=='.'||s[strlen(s)-1]=='?'||s[strlen(s)-1]=='!')
break;
}
}
}