Chương trình đảo ngược thứ tự các từ có trong chuỗi trong C++

Viết chương trình đảo ngược thứ tự các từ có trong chuỗi
Ví dụ: Nhập:lap trinh bang ngon ngu c
Xuất ra màn hình là: c ngu ngon bang trinh lap

bạn dùng 2 con trỏ chạy ngược từ cuối xâu, cứ mỗi con trỏ khi gặp khoảng trắng thì đánh dấu

dùng strtok và viết 1 hàm đệ quy cho chạy là ổn.

có cách nào khong dùng đệ qui không bạn ?tại mình chưa học đệ qui

cụ thể hơn được ko bạn?cảm ơn

Mình viết hơi dài, bạn cải tiến thêm nha :smiley:

#include <iostream>
using namespace std;

int main()
{
	string myStr;
	getline(cin, myStr);
	int n = myStr.size();
	int i, j = n-1;
	
	for(i = n-1; i >= 0; i--) {
		if(myStr[i] == ' ') { 
			for(int pos = i+1; pos <= j; pos++) cout << myStr[pos];
			j = i-1;
			cout << " ";
		}
		if(i == 0) {
			for(int pos = i; pos <= j; pos++) cout << myStr[pos];
		}
	}
}
2 Likes
int count_space(string s){
	int count = 0;
	for (int i = 0; i < s.size(); i++){
		if (s.at(i) == ' ')
			count++;
	}
	return count;
}
string *split(string s){

	int space = count_space(s);
	string *arr = new string[space + 1];
	stringstream ss;
	ss << s;
	string buf;
	int i = 0;
	while (i <= space)
	{
		ss >> buf;
		arr[i++] = buf;
	}
	return arr;
}

string dao(string s){
	int space = count_space(s);
	string *a = split(s);
	string swap = "";
	for (int i = space; i >= 0 ; i--){
		swap += a[i];
		if (i != 0)
			swap += " ";
	}
	return swap;
}

cảm ơn bạn nhiều,mình mới học nên ko biết gì

Bạn có thể dùng Hàm strrev :
• Công dụng: đảo ngược chuỗi kí tự
• Cấu trúc:
char *strrev(char *s);

1 Like

strrev nó đảo tất cả kí tự, còn yêu cầu là đảo ngược các từ (ngăn cách bởi dấu cách) có trong câu bạn ạ.

Ukm. M xin lỗi , m nhầm mất câu hỏi.

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