30/09/2018, 16:14
[Thắc mắc] Xóa khoảng trắng thừa trong chuỗi, có sử dụng con trỏ
Bài mình làm vẫn cho ra kết quả nhưng không hiểu sao có lúc bị cảnh báo như trong hình có lúc lại không bị, các bạn xem xem mình bị sai ở đâu, cảm ơn mọi người
Code: http://codepad.org/i2RU1ZMe
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Ham xoa ky tu khoang trang
void XoaKyTu(char *s, int i)
{
int j;
for (j = i; j < strlen(s); j++)
s[j] = s[j + 1];
}
int main()
{
char *s;
s = (char *)malloc(sizeof(char));
int i;
printf("Nhap chuoi:");
gets(s);
for (i = 0; i < strlen(s); i++)
{
if (s[i] == ' ' && s[i + 1] == ' ')
{
XoaKyTu(s, i);
i--;
}
}
if (s[0] == ' ')
XoaKyTu(s, 0);
if (s[strlen(s) - 1] == ' ')
s[strlen(s) - 1] == ' ';
printf("Chuoi la:%s", s);
free(s);
return 0;
}
Bài liên quan
for (j = i; j < strlen(s); j++)
s[j] = s[j + 1];
cái này khi chạy tới kí tự cuối cùng của chuổi thì s[j + 1]; sẽ truy xuất ra ngoài vùng nhớ của chuổi
Mình cũng chưa rõ lắm về cấp phát bộ nhớ để làm việc với chuỗi, làm sao để cấp phát bộ nhớ để nhập chuỗi vậy mọi người.
Mèn ơi, vậy phải tìm hiểu cách cấp phát bộ nhớ trước chứ, dùng google để search có rất nhiều bài viết nói về cái này rồi