Hỏi về chuỗi trong C/C++

#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 :smiley:

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

1 Like

ý 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

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.

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 :smiley:

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 :smiley:

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

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ả.

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

2 Likes

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

2 Likes

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

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