30/09/2018, 16:47

Đảo ngược chuỗi kí tự

đảo nguoc từ trong chuỗi ví dụ " mot hai ba" thành “ba hai mot”

Nguyễn Minh Dũng viết 19:00 ngày 30/09/2018

Dùng ngôn ngữ gì vậy Kiệt? Nhưng về bản chất thì mình tách làm 3 chữ, lưu lại rồi sắp xếp ngược lại là được.

Minh Hoàng viết 18:50 ngày 30/09/2018

Mình move bài này sang bài mới nhé, vì khác chủ đề @Nguy_n_Trung_Ki_t
bài này thì mình chủ yếu dùng strtok để tách từ
sau đó mình sẽ dùng đệ quy hoặc duyệt để sắp xếp lại tùy bạn thôi

Gió viết 18:55 ngày 30/09/2018

Chuyển sang python cho dễ học bạn ạ


result= ' '.join(reversed(s.split()))

Nguyễn Trung Kiệt viết 18:50 ngày 30/09/2018

Em xài devC anh Đạt :))

Nguyễn Trung Kiệt viết 18:49 ngày 30/09/2018

em định xài strtok để tách nó ra nhưng em không biết lưu nó ở đâu để xếp lại,em mới học chuỗi nên chưa có kinh nghiệm

Nguyễn Minh Dũng viết 18:48 ngày 30/09/2018

Em dùng loop để lưu lại đi: http://www.cplusplus.com/reference/cstring/strtok/

Sau đó chèn vào đầu chuỗi output là được

Nguyễn Trung Kiệt viết 18:47 ngày 30/09/2018

hàm strtok trả về kiểu char đúng không anh Đạt

Minh Hoàng viết 18:55 ngày 30/09/2018

trả về địa chỉ của chuỗi kí tự

BaoLe viết 18:53 ngày 30/09/2018

Thế này đã được chưa vậy???

void ReverseString(char str[])
{
	char str_new[255] = "";
	for(int i = strlen(str) - 1; i >= 0; i--)
		if(str[i] == ' ')
		{
			strncat(str_new, str + i + 1, strlen(str + i + 1));
			strcat(str_new, " ");
			str[i] = 0;
		}
		strcat(str_new,str);
		printf("%s\n", str_new);
}
Nguyễn Trung Kiệt viết 18:50 ngày 30/09/2018

bạn cho mình hỏi cách dùng hàm strncat với

Đỗ Mạnh Hà viết 19:01 ngày 30/09/2018

Đầu tiên bạn nên có 1 hàm dùng để tách từ từ 1 chuỗi rồi lưu nó vào mảng theo thứ tự tách từ trái qua phải. Sau đó bạn chỉ việc duyệt mảng sau khi tách từ cuối về đầu là OK thôi bạn.

Nguyễn Trung Kiệt viết 19:00 ngày 30/09/2018

mình không biết hàm tách từ :3

Đỗ Mạnh Hà viết 18:52 ngày 30/09/2018

Đơn giản thôi bạn. Nếu bạn dùng các ngôn ngữ bậc cao như C#, Java, … thì bạn chỉ cần gọi hàm Split(" "); của chuỗi đó là nó sẽ trả về cho bạn 1 mảng các phần tử là các từ của bạn.

Nếu bạn dùng các ngôn ngữ bậc thấp hơn mà không có hàm sẵn thì bạn tự viết ra nó cũng khá dễ.
Đầu tiên bạn chỉ cần duyệt chuỗi đó như 1 mảng char các ký tự và cứ đến khi gặp ký tự space thì bạn có thể lưu chỉ số (index) của ký tự space đó và từ đó tách được các từ thôi.

Nguyễn Trung Kiệt viết 18:52 ngày 30/09/2018

ý là mình o biết tách thế nào ấy,ví dụ muốn cắt trong chuỗi từ vị trí thứ a den vị trí thu b có hàm nào ko,chứ ý tưởng thì mình nghĩ ra dc

Đỗ Mạnh Hà viết 18:58 ngày 30/09/2018

Ví dụ trong C thì string là 1 mảng char nên chỉ cần duyệt từ vị trí a tới vị trí b và lưu nó ra 1 chuỗi khác thôi.

Gió viết 19:00 ngày 30/09/2018

Bài này mình nghĩ không cần mảng phụ hay tách ra gì cả. Chỉ cần đảo từng từ, sau đó đảo cả chuỗi thì ra kq thôi Code tham khảo

#include <stdio.h>

#include <string.h>

void reverse(char * s,int begin,int end){
    int i,len=end-begin+1;
    char t;
    for(i=0; i<len/2;i++){
        t=s[begin+i];
        s[begin+i]=s[end-i];
        s[end-i]=t;
    }
}

void rev(char* s){
    int i,begin;

    while(s[i]){
        if(s[i]==' ') i++;
        else{
            begin=i;
            while(isalnum(s[i])){
                 i++;
            }
            reverse(s,begin,i-1);
        }
    }
    reverse(s,0,i-1);
}
int main() {
	char s[]="mot hai ba ";
        rev(s);
        puts(s);
	return 0;
}

Nguyễn Trung Kiệt viết 19:00 ngày 30/09/2018
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) 
{
	char s[100];
	char *p;
	char **a;
	printf("Nhap chuoi:");
	fflush(stdin);
	gets(s);
	int j,i=0;
	p=strtok(s,' ');
	while(p!=NULL)
	{
		a[i]=p;
		i++;
		p=strtok(NULL,' ');
	}
	printf("Chuoi sau khi dao:\n");
	for(j=i;j>i;j--)
	{
		printf("%s ",a[i]);
	}
	return 0;
}

mọi người xem dùm code mình sai chỗ nào sao chạy không ra :3

Gió viết 18:52 ngày 30/09/2018

j chạy từ i-1 -> 0 , char ** a=> char* a[100]; chẳng hạn

Nguyễn Trung Kiệt viết 18:48 ngày 30/09/2018

van ko ra :3 hichic,haiz

Minh Hoàng viết 18:57 ngày 30/09/2018

Code đệ quy để vọc chơi

#include <stdio.h>
#include <string.h>
void	reverse_recursion(char* p)
{
	if (p!=NULL)
	{	
		reverse_recursion(strtok(NULL," "));
		printf("%s ",p);
	}
}
int main()
{
	char a[]="mot hai ba bon nam";
	char* p=strtok(a," ");
	reverse_recursion(p);
	getchar();
	getchar();
	return 0;
}
Bài liên quan
0