Xây dựng hàm cắt chuỗi trong c

Nhờ mọi người xem giúp hàm cắt chuỗi của mình sai ở đâu mà nó lại in ra kí tự lạ vậy nhỉ. Rõ ràng mình đã xét kí tự kết thúc chuỗi rồi. Mình cảm ơn.!

#include<iostream>
using namespace std;

int lenstr(char *s)
{
	int n = 0;
	while (s[n] != '\0')
	{
		n++;
	}
	return n;
}

void cpystr(char *p, char *s)
{
	int len = lenstr(s);
	for (int i = 0; i < len; i++)
	{
		p[i] = s[i];
	}

	p[len] = '\0';
}

char *substr(char *s, int start, int end)
{
	char p[100];
	//int len = lenstr(s);
	int indext = 0;

	for (int i = start; i <= end; i++)
	{
		p[indext] = s[i];
		indext++;
	}
	p[indext] = '\0';

	return p;
}
int main()
{
	char s[] = "ABCDEF";
	char p[100];

	cpystr(p, substr(s, 1, 3));
	cout << p;
	system("pause");
	return 0;
}

Mình thấy hàm của bạn đúng logic mà. Mình đã edit lại là C++ rồi tại vì code của bạn có cout mà sao lại C nhỉ :slight_smile:

1 Like

mình cout ra cho nhanh thôi bạn. Nếu mà c thì cứ printf rồi %s… mất thời gian. Mình test thì mình hay cout với cin cho nhanh thôi. :slight_smile:

Mà thôi không quan trọng vì bài này C cũng như C++, nhưng hàm của bạn chạy ổn :slight_smile: mình vừa mới test

Bên mình thì thế. :frowning:

Bên mình thì ngon trim

1 Like

Cay. Giờ làm sao giờ b nhỉ. :(. Có cần phải thêm hàm xóa bộ đệm không nhỉ?.

Mình copy hết code của bạn. Bạn xem lại xem bạn có copy thiếu dòng nào không?
Format code lại cho dễ nhìn

```
code của bạn
```
1 Like

ukm. cam on ban!. Minh format lai code roi

Bạn kiểm tra lại hàm này nhé. p là biến cục bộ. Sau khi ra khỏi hàm bộ nhớ sẽ bị thu hồi, nên nó mới hiện ra những kí tự rác. Bạn có thể dùng cấp phát động, hoặc truyền p ở ngoài vào.

1 Like
char *substr(char *s, int start, int end)
{
	static char p[100];
	int indext = 0;

	for (int i = start; i <= end; i++)
	{
		p[indext] = s[i];
		indext++;
	}
	p[indext] = '\0';

	return p;
}

Bạn đổi con trỏ p thành static để khi nó return thì vùng nhớ của con trỏ p vẫn chưa bị huỷ. Chúc thành công.

2 Likes

Cam on m.n. Minh lam duoc roi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?