01/10/2018, 09:32

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;
}
Khoa NTA viết 11:36 ngày 01/10/2018

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.

rogp10 viết 11:34 ngày 01/10/2018

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

Tao Không Ngu. viết 11:43 ngày 01/10/2018

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

anon51853234 viết 11:47 ngày 01/10/2018

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.
}
Lam Nguyen viết 11:36 ngày 01/10/2018

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

Bài liên quan
0