Chuyển các số trong ma trận thành 1 chuỗi kí tự

Chào a/c và các bạn. Em có một ma trận các số thực và em muốn gộp nó lại thành chuỗi kí tự các số liên tiếp cách nhau bởi dấu cách thì mình xử lí như thế nào ạ :smiley:
80522145_471370370483725_3643825562159415296_n%20-%20Copy
Đây là đoạn code em làm thử, nhưng chạy không được ạ :smiley:

void concatMatrix(double a[][MAX], int row, int col, char str[]){
  for(int iRow=0;iRow<row;iRow++)
    {
      for (int iCol=0; iCol<col;iCol++)
      {
        strcpy(str,a[iRow][iCol]);
      }
    }
}

C hay C++ vậy?
Gắn thẻ bài viết là C++ mà!
strcpy() nhận 2 tham số là char*, bạn lại truyền kiểu double là không được rồi. Mà dùng strcpy() cũng không ra kết quả đúng đâu.
Nên dùng sprintf().

Nhưng nếu là C++ thì dùng string luôn cho lành!

4 Likes

Bài này thì bạn phải code lại cái std::vector rồi :slight_smile: phần cấp phát mem.

2 Likes

Em mới năm nhất, chưa học đến vector nên không cho dùng ạ :v:

Bởi vậy mới phải code lại :smiley:

Cái chính là giữ cái mảng (*a), số phần tử (length) và số ô mem cấp phát (capacity) đi với nhau.

3 Likes

Máy tính đâu có lưu chính xác số thực đâu mà biết nó có 1,2 hay 3 số thập phân. Để rồi in ra chuỗi kết quả hoàn hảo thế kia.
Ông nào cho cái đề gì kì vậy? :neutral_face:

3 Likes

Nếu là C thì có thể xài sprintf() cho lẹ. :slight_smile:

#include <stdio.h>
#include <string.h>

#define MAX 10

void sher(double mt[][MAX], int r, int c, char *s) {
    *s = '\0';
    char tmp[15];
    for (int i = 0; i < r; ++i) {
        for (int j = 0; j < c; ++j) {
            sprintf(tmp, "%g ", mt[i][j]);
            strcat(s, tmp);
        }
    }
}

int main() {
    double mt[MAX][MAX] = {
        {123, 4.56, 7.8, -9},
        {0.1, 2.34, 5.6, 78.9},
        {0.12, -3.4, -5, 67.89}
    };
    char s[100];
    sher(mt, 3, 4, s);
    printf("%s\n", s);
    return 0;
}

Out:

123 4.56 7.8 -9 0.1 2.34 5.6 78.9 0.12 -3.4 -5 67.89 

Output có thừa một space ở cuối đó, thớt tự xử lý nốt nha. :slight_smile:

Còn nữa, xài %g thì nó chỉ xài được đến 999999 thôi, hơn nữa nó sẽ biểu diễn ở dạng dấu phẩy động. (như 1e07)

4 Likes

Cho em hỏi tí,*s = '\0'; nghĩa là gì vậy ạ :smiley:

Dòng đó tương đương với s[0] = '\0';

Và nó nghĩa là đưa s về chuỗi rỗng.

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