01/10/2018, 13:53

Đảo từ trong chuỗi

Đề: Đảo vị trí các từ trong chuỗi, ví dụ: Day Nhau Hoc -> Hoc Nhau Day
Thực ra em đã vô tình làm ra đáp án nhưng không hiểu 1 chỗ: Khi in được 2 từ "Hoc Nhau " rồi, biến batdau = ViTriCach_Nguoc(s,i) + 1, nhưng phía trước đó không còn dấu cách nào, lúc debug thì thấy ViTriCachNguoc = -1, nên batdau = -1 + 1 =0, và nó in ra được từ Day
Đây là code của em, mn giải thích giúp với

#include<stdio.h>
#include<string.h>
#include<conio.h>
int ViTriCach_Nguoc(char s[],int beginfrom)//hàm đi ngược từ sau về trước để tìm vị trí dấu cách, beginfrom là vị trí bắt đầu dò ngược
{
	for (int i = beginfrom; i >= 0; i--)
	{
		if (s[i] == ' ')
			return i;
	}
}

void DaoTu(char s[], int len)
{
	int batdau, ketthuc = len - 1;
	for (int i = len; i >= 0; i = ketthuc)
	{
		batdau = ViTriCach_Nguoc(s, i) + 1;
		for (int k = batdau; k <= ketthuc; k++)
			printf("%c", s[k]);
		printf(" ");
		ketthuc = ViTriCach_Nguoc(s, i) - 1;
	}
}
void main()
{
	char s[100];
	printf("nhap chuoi:"); fflush(stdin); gets(s);
	int len = strlen(s);
	DaoTu(s,len);
	getch();
}

2 D Team Free Online Education viết 15:53 ngày 01/10/2018

thực ra thì nó rất đơn giản , cho 1 biến i chạy từ cuối chuỗi đến đầu chuỗi , nếu gặp kí tự space thì chạy biến j đến vị trí cuối (trong TH đầu tiên và đến vị trí space trong các TH tiếp theo) rồi in ra hoặc lưu lại (tùy yêu cầu),

Not Now viết 16:08 ngày 01/10/2018

dạ, code hoạt động theo cách đó, nhưng ý của em muốn hỏi ở đây là, phía trước từ “Day” trong chuỗi “Day Nhau Hoc” không có khoảng trắng, nhưng lại in ra được từ “Day”, và như đã trình bày, giá trị của biến ViTriCach_Nguoc lúc này bằng -1, biến batdau = 0 và nó bắt đầu in s[0] đến s[2] ( từ “Day”).

*grab popcorn* viết 16:05 ngày 01/10/2018

Mình có giải thích ở đây:
Giá trị trả về của hàm khi ko có hàm return

Bài liên quan
0