Chào mọi người, em có làm cái code như này mà không hiểu sao chỉ có 3/10 test case đúng, khi test bằng CodeBlocks nó còn ra kết quả kèm mấy char rác kì lắm ạ
Mọi người giúp giải thích giúp em tại sao nó lại có char rác với làm sao khắc phục với ạ! ><
Note: Em không được dùng các hàm có sẵn của cstring ạ!
(Ngôn ngữ C++)
Hình ảnh test
Code
#include <iostream>
using namespace std;
#define MAX 300
void DemTieng(char s1[]);
int myStrcmp(char s1[], char s2[]);
int main()
{
char s[MAX];
fgets(s,MAX,stdin);
if (myStrcmp(s, "") == 0)
cout << "Chuoi rong." << endl;
else
DemTieng(s);
return 0;
}
int myStrcmp(char s1[], char s2[])
{
if (s1[0] == '\n')
return 0;
for (int i = 0; s1[i] != 0; i++)
{
if (s1[i] != s2[i] && s1[i] > s2[i])
return 1;
else if (s1[i] != s2[i] && s1[i] < s2[i])
return -1;
}
return 0;
}
void DemTieng(char s1[])
{
char tieng[MAX][10];
int soTieng = 0;
int k = 0;
//luu tru tung tieng trong cau
for (int i = 0; s1[i] != 0; i++)
{
if (s1[i] != ' ')
{
if (s1[i] == '\n')
break;
tieng[soTieng][k] = s1[i];
k = k + ((s1[i+1] == ' ' || s1[i+1] == '\n') ? 0 : 1);
}
else
{
soTieng++;
k = 0;
}
}
int dem;
char *temp = new char [soTieng]; //mang danh dau cac vi tri trung lap, vi tri trung danh dau '1', khong trung la NULL
//kiem tra tan so tung tieng
for (int i = 0; i <= soTieng; i++)
{
dem = 0;
//neu tieng nay da xet qua roi thi bo qua
if (temp[i] != '1')
{
for (int m = i; m <= soTieng; m++)
{
//neu tieng nay chua tung xet qua va trung lap voi tieng dang xet thi tang bien dem
if (temp[m] != '1' && myStrcmp(tieng[i], tieng[m]) == 0)
{
dem++;
temp[m] = '1'; //neu day la tieng lan dau tien xet qua thi danh dau vi tri cua no de lan sau khong xet nua
}
}
cout << tieng[i] << ": " << dem << endl;
}
}
}