Thêm chuỗi số C++

Như bạn đã biết, cách tốt nhất để nối hai chuỗi trong lập trình C là sử dụng hàm strcat(). Tuy nhiên, trong ví dụ này, chúng ta sẽ nối hai chuỗi theo cách thủ công


Nối hai chuỗi mà không cần sử dụng strcat()

#include 
int main() {
  char s1[100] = "programming ", s2[] = "is awesome";
  int length, j;

  // store length of s1 in the length variable
  length = 0;
  while (s1[length] != '\0') {
    ++length;
  }

  // concatenate s2 to s1
  for (j = 0; s2[j] != '\0'; ++j, ++length) {
    s1[length] = s2[j];
  }

  // terminating the s1 string
  s1[length] = '\0';

  printf("After concatenation: ");
  puts(s1);

  return 0;
}

đầu ra

After concatenation: programming is awesome

Ở đây, hai chuỗi s1 và s2 được nối với nhau và kết quả được lưu trong s1

Điều quan trọng cần lưu ý là độ dài của s1 phải đủ để giữ chuỗi sau khi nối. Nếu không, bạn có thể nhận được kết quả không mong muốn

Nối chuỗi là một quá trình kết hợp hai chuỗi để tạo thành một chuỗi duy nhất. Nếu có hai chuỗi thì chuỗi thứ hai được thêm vào cuối chuỗi đầu tiên

Ví dụ: Xin chào + javaTpoint = Xin chào javaTpoint

Chúng ta có thể nối các chuỗi theo ba cách sau

  • Nối hai chuỗi bằng vòng lặp
  • Nối hai chuỗi bằng con trỏ
  • Nối hai chuỗi bằng hàm strcat()

Nối hai chuỗi bằng vòng lặp

Phân tích chương trình trên

  • Trong chương trình trên, chúng ta khai báo hai chuỗi i. e. , first_string và second_string. Giá trị của hai chuỗi này được người dùng lấy làm đầu vào
  • Chúng ta sẽ nối hai chuỗi này và lưu kết quả của phép nối vào first_string
  • Chúng tôi khai báo một biến số nguyên mới có tên là 'i'. Sau khi khai báo, chúng ta sẽ chạy một vòng lặp lặp từ i=0 cho đến khi gặp ký tự null của first_string. Khi quá trình thực hiện vòng lặp hoàn tất, thì giá trị của 'i' sẽ bằng độ dài của chuỗi cộng với một
  • Chúng tôi sẽ xác định một vòng lặp mới khác, về cơ bản được sử dụng để nối hai chuỗi. Vòng lặp này bắt đầu từ j=0 và thực thi cho đến khi gặp ký tự null của chuỗi thứ hai. Trên mỗi lần lặp, ký tự nằm ở vị trí thứ j trong chuỗi_thứ_hai được lưu trữ ở vị trí thứ i của chuỗi_thứ_nhất. Bằng cách này, cả hai chuỗi được kết hợp với nhau để tạo thành một chuỗi duy nhất

đầu ra

Thêm chuỗi số C++

Nối hai chuỗi bằng con trỏ

Phân tích chương trình trên

  • Trong chương trình trên, chúng ta đã khai báo biến mảng ký tự, i. e. , chuỗi1 và chuỗi2. Chúng tôi lấy hai chuỗi làm đầu vào của người dùng và lưu trữ chúng trong các biến chuỗi1 và chuỗi2,
  • Ta khai báo hai con trỏ char str1 và str2. str1 chứa địa chỉ của string1 và str2 chứa địa chỉ của string2
  • Chúng tôi tạo một vòng lặp lặp lại cho đến khi gặp ký tự null của chuỗi1. Khi hoàn thành việc thực hiện vòng lặp, thì con trỏ str1 trỏ đến vị trí tồn tại ngay sau vị trí của ký tự cuối cùng
  • Chúng tôi xác định một vòng lặp while khác lặp lại cho đến khi gặp ký tự null của chuỗi2. Trên mỗi lần lặp lại, ký tự được lưu trữ tại vị trí thứ j trong chuỗi2 được thêm vào chuỗi1 bằng cách sử dụng câu lệnh *str1=*str2

đầu ra

Thêm chuỗi số C++

Nối hai chuỗi bằng strcat()

Bây giờ chúng ta sẽ xem cách nối hai chuỗi bằng hàm strcat(). strcat() là một hàm sẵn có được định nghĩa trong một chuỗi. tập tin tiêu đề h

Hãy xem ví dụ

Trong đoạn mã trên, chúng ta sử dụng hàm strcat() để nối hai chuỗi. Nó nhận hai chuỗi làm tham số và sau đó nối chuỗi thứ hai vào cuối chuỗi đầu tiên


Thêm số và chuỗi

CẢNH BÁO

C++ sử dụng toán tử + cho cả phép cộng và phép nối

Số được thêm vào. Chuỗi được nối

Nếu bạn cộng hai số, kết quả sẽ là một số

Thí dụ

int x = 10;
int y = 20;
int z = x + y;

Tự mình thử »

Nếu bạn thêm hai chuỗi, kết quả sẽ là nối chuỗi

Thí dụ

chuỗi x = "10";
chuỗi y = "20";
chuỗi z = x + y;

Tự mình thử »

Nếu bạn cố gắng thêm một số vào một chuỗi, sẽ xảy ra lỗi

Thí dụ

chuỗi x = "10";
int y = 20;
chuỗi z = x + y;


Bước đầu tiên để nối biến int và chuỗi ký tự là chuyển đổi một số nguyên thành chuỗi. Chúng tôi sử dụng hàm asprintf để lưu trữ số nguyên đã truyền dưới dạng chuỗi ký tự. asprintf là một phần của tiện ích mở rộng thư viện GNU C và có thể không có sẵn trong các triển khai khác. Nó hoạt động tương tự như

#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, "Hello there, "), num);
        strcat(buffer, "! continued");
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}
2 ngoại trừ bộ đệm chuỗi ký tự đích được phân bổ động bằng cách sử dụng lệnh gọi hàm
#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, "Hello there, "), num);
        strcat(buffer, "! continued");
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}
3 bên trong và con trỏ được trả về phải được giải phóng trước khi thoát khỏi chương trình. Sau khi số nguyên được chuyển đổi, chúng tôi xâu chuỗi các cuộc gọi strcpystrcat để nối hai chuỗi ký tự đã cho trong bộ đệm mà người dùng cấp phát. Trong trường hợp này, chúng tôi tùy ý xác định macro
#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, "Hello there, "), num);
        strcat(buffer, "! continued");
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}
6 để biểu thị kích thước của bộ đệm đích, nhưng trong các tình huống thực tế, sẽ linh hoạt hơn khi sử dụng
#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, "Hello there, "), num);
        strcat(buffer, "! continued");
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}
3

#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, str1), num);
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}

đầu ra

Ngoài ra, các cuộc gọi chuỗi có thể được theo sau bởi một lời gọi khác của hàm strcat và nối các chuỗi khác vào bộ đệm

#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, "Hello there, "), num);
        strcat(buffer, "! continued");
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}
9 đã cho. Lưu ý rằng chúng tôi kiểm tra hàm asprintf để biết giá trị trả về thành công và nếu nó không thành công, thì chúng tôi tiếp tục với quy trình nối

#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        strcat(strcpy(buffer, "Hello there, "), num);
        strcat(buffer, "! continued");
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}

đầu ra

Hello there, 1234! continued

Sử dụng các hàm asprintf và Hello there, 1234! continued 2 để nối chuỗi và số nguyên trong C

Ngoài ra, có thể sử dụng asprintf kết hợp với

Hello there, 1234! continued
2 để nối chuỗi ký tự và int.
Hello there, 1234! continued
2 là một phần của các tiện ích chuỗi thư viện chuẩn C được xác định trong tệp tiêu đề
Hello there, 1234! continued
7. Phải mất hai con trỏ biểu thị bộ đệm nguồn và đích. Lưu ý rằng các vùng bộ nhớ đệm này không được chồng lên nhau; . Hai đối số cuối cùng đại diện cho ký tự dừng sao chép và số byte tối đa được lấy từ vị trí nguồn. Chúng tôi gọi hàm
Hello there, 1234! continued
8 trong phạm vi
Hello there, 1234! continued
9 vì nếu không, chúng tôi không thể chắc chắn con trỏ
#define _GNU_SOURCE
#include 
#include 
#include 

#ifndef MAX
#define MAX 100
#endif

int main(int argc, char *argv[]) {
    const char* str1 = "hello there";
    int n1 = 1234;

    char *num;
    char buffer[MAX];

    if (asprintf(&num, "%d", n1) == -1) {
        perror("asprintf");
    } else {
        memccpy(memccpy(buffer, str1, '\0', MAX) - 1, num, '\0', MAX);
        printf("%s\n", buffer);
        free(num);
    }

    exit(EXIT_SUCCESS);
}
0 là con trỏ hợp lệ

Làm cách nào để thêm hai chuỗi số trong C?

Có nhiều cách để nối hai chuỗi trong ngôn ngữ C. .
Không sử dụng hàm strcat(). Sử dụng phương pháp tiêu chuẩn. Sử dụng chức năng. Sử dụng đệ quy
Sử dụng hàm strcat()

Làm cách nào để thêm vào chuỗi trong C?

Trong C, hàm strcat() dùng để nối hai chuỗi . Nó nối một chuỗi (nguồn) vào cuối một chuỗi khác (đích). Con trỏ của chuỗi nguồn được thêm vào cuối chuỗi đích, do đó nối cả hai chuỗi.

Làm cách nào để thêm số nguyên vào chuỗi trong C?

Cách tiếp cận. Thực hiện theo các bước dưới đây để giải quyết vấn đề. .
Đi qua chuỗi S. Chuyển đổi ký tự hiện tại của chuỗi N thành giá trị nguyên tương đương của nó. Thêm giá trị số nguyên thu được vào giá trị ASCII tương đương của ký tự hiện tại trong chuỗi S. .
In chuỗi kết quả sau khi hoàn thành các bước trên

Bạn có thể đặt một số trong một chuỗi trong C không?

có, một chuỗi có thể là bất kỳ số nào, bất kỳ từ nào hoặc ký hiệu nào . Nhưng tất cả những thứ này sẽ được lưu trữ dưới dạng chuỗi ký tự hoặc mảng ký tự. Công dụng của chuỗi trong C là gì?