Xóa khoảng trắng thừa của chuỗi

mình có bài tập về chuỗi, đề bài là xóa các khoảng trắng thừa bao gồm đầu cuối và giữa của chuỗi, mình viết chương trình như này không biết sai chỗ nào, nhờ mọi người giúp mình sửa lỗi, cám ơn

#include<stdio.h>
#include<string.h>
char *string_standardized(char *target);
int main()
{
	char* target;
	gets(target);
	string_standardized(target);
	puts(target);
	return 1;
}

char *string_standardized(char *target) {
	

	
	if (target == NULL) {
        return NULL;
    }
    
	while(target[0] == ' ')
	{
		strcpy(&target[0],&target[1]);
	}
	

	while(target[strlen(target) - 1] == ' ')
	{
		strcpy(&target[strlen(target) - 1],&target[strlen(target)]);
	}
	
	for(int i =0; i < strlen(target); i++)
	{
		if((target[i] == ' ') && (target[i+1] == ' ')	)
		{
			strcpy(&target[i],&target[i+1]);
			i--;
		}
	}

	return target;
}

Lỗi do bạn chỉ khai báo con trỏ chuỗi nhưng không cho nó trỏ với vùng nhớ nào cả (tìm hiểu về cấp phát động). Hoặc bạn có thể khai báo kích thước cố định cho chuỗi: char target[100]; như vậy là xong.

1 Like

Code này thấy nhì nhằng quá, với lại strcpy không chạy trên hai chuỗi chồng lên nhau đâu :slight_smile:

1 Like

Hi Lam Nguyen.
Làm một cái Oto là xong.

mình chưa học con trỏ nên làm như vầy, debug ra đúng hết , trình mình hơi cùi nên code lằng nhằng lắm ,

#include <stdio.h>
#include <string.h>

int main() {
    char s[50];
    char s_kq[50];

    int i, j,k,y,z,m;
    printf("nhap vao chuoi : ");
    scanf ("%[^\n]%*c", s);
    // VD : nhập vào : "  vu duc huy   "
    // tìm vị trí chữ cái đầu tiên của chuổi.
    for( i =0; i < strlen(s); i++) {
        if(s[i]!=' ') {
            k=i;

            break;
        }
    }
    // loại bỏ space phía trước chuổi.
    for( j =0; j < strlen(s); j++,k++) {
        s_kq[j]=s[k];
    }
    // tìm vị trí kí tự cuối cùng của chuổi. lúc này chuổi là : "vu duc huy   "
    for(z=strlen(s_kq)-1; z >=0; z--) {
        if(s_kq[z]!=' ') {
            y=z;
            break;
        }
    }
    // sắp xếp lại chuổi và loại bỏ các khoảng trắng trong chuổi.
    for(m=0, j=0; m < strlen(s); m++,j++) {
        s[m]=s_kq[j];
        s[y+1]='\0';
    }
    printf("%s", s);// ket qua in ra : "vu duc huy"
    return 0;// lưu ý debug để hiểu rỏ hơn và thấy rỏ rằng kết quả cuối cùng trả về chính xác : vu duc huy\0.
}

ok mình cám ơn :slight_smile: ~~~~~~~~~~~~~~

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