30/09/2018, 17:12

Hỏi về chuỗi trong DevC++

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main(int argc, char *argv[]) 
{
	char s[100];
	int i,n,j;
	gets(s);
	n=strlen(s);
	for(i=0;i<n;i++)
	{
		if(s[i]!=' ')
			break;
		else
		{
			for(j=i;i<n;j++)
			{
				s[j]=s[j+1];
			}
			i--;
		}
	}
	printf("Chuoi la:%s %d",s,strlen(s));
	return 0;
}

Em đang viết xóa khoảng trắng ở đầu chuỗi nhưng chạy chưa đúng mọi người coi dùm em cái

vũ xuân quân viết 19:17 ngày 30/09/2018

anh đoán là sai chỗ i–.
vì dòng for ngoài là i++ vô else là i-- thấy không hợp lý.
em kiểm tra lại

Trungkiet Nguyen viết 19:16 ngày 30/09/2018

ý em là nếu ko có i-- thì nó chỉ duyet một lần à,phải vi trong vòng chạy 1 lần nó sẽ tăng lên 1, như vậy nếu mình nhập hơn 2 khoảng trắng ở đầu chuỗi thì nó sẽ bỏ qua tất cả các khoảng trắng còn lại nó chỉ xóa 1 cái khoảng trắng đầu tiên thôi

Gió viết 19:15 ngày 30/09/2018
if(s[i]!=' ')
			break;

Thuật toán của bạn bị sai rồi, bởi nó không có tác dụng xóa khoảng trắng (khi không gặp ' ' break) ngay.

Trungkiet Nguyen viết 19:23 ngày 30/09/2018

ngay chỗ này ý là lúc mình chạy ừ đầu chuỗi mà ko gặp khoảng trắng thì có nghĩa là chuỗi này ko có khoảng trắng ở đầu chuỗi nên thoát ngay

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

Bởi trong vòng for nếu bạn gặp 1 kí tự không phải khoảng trắng thì làm sao biết được phía sau có hay không mà break rồi

Trungkiet Nguyen viết 19:24 ngày 30/09/2018

đề yêu cầu xóa khoảng trắng ở đầu chuỗi thôi mà @@

vũ xuân quân viết 19:20 ngày 30/09/2018

anh nghĩ thuật toán em bị sai
lúc đầu
''n=strlen(s);
sau thì
''s[j]=s[j+1];
dẫn đến là độ dài của chuỗi thay đổi. chạy hết dòng for là báo lỗi.
nên tạo một mảng con khác để chứa kết quả.

Gió viết 19:24 ngày 30/09/2018
for(j=i;i<n;j++)

Ồ, sorry!. mình nghĩ đoạn này là j<n

Trungkiet Nguyen viết 19:13 ngày 30/09/2018

uh đúng roi zay mà ko thấy,ghi nhầm thành i

Nguyễn Duy Khánh viết 19:18 ngày 30/09/2018

bài này dùng while hay hơn nhiều

Bài liên quan
0