01/10/2018, 10:45

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] != '')
	{
		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] = '';
}

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] = '';

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

	cpystr(p, substr(s, 1, 3));
	cout << p;
	system("pause");
	return 0;
}
Henry viết 13:00 ngày 01/10/2018

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ỉ

vo van hung viết 13:00 ngày 01/10/2018

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.

Henry viết 12:58 ngày 01/10/2018

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 mình vừa mới test

vo van hung viết 12:45 ngày 01/10/2018

Bên mình thì thế.

Henry viết 12:55 ngày 01/10/2018

Bên mình thì ngon trim

vo van hung viết 12:47 ngày 01/10/2018

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

Henry viết 12:55 ngày 01/10/2018

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
```
vo van hung viết 12:56 ngày 01/10/2018

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

Duc Khan viết 12:49 ngày 01/10/2018

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;
}

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.

Phạm Minh Anh Hữu viết 12:48 ngày 01/10/2018
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.

vo van hung viết 12:50 ngày 01/10/2018

Cam on m.n. Minh lam duoc roi

Bài liên quan
0