Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

Ngay bây giờ tôi đang thử điều này:

#include 

int main(int argc, char *argv[]) {

    if (argc != 3) {

        printf("Usage: %s %s sourcecode input", argv[0], argv[1]);
    }
    else {
        char source[] = "This is an example.";
        int i;

        for (i = 0; i < sizeof(source); i++) {

            printf("%c", source[i]);
        }
    }

    getchar();

    return 0;
}

Điều này cũng không hoạt động:

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}

Tôi nhận được lỗi

Ngoại lệ chưa được xử lý tại 0x5BF714CF (MSVCR100D.DLL) trong Test.exe: 0xC0000005: Vi phạm truy cập trong khi đọc ở vị trí 0x00000054.

(Dịch một cách lỏng lẻo từ tiếng Đức)

Vậy mã của tôi có gì sai?

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

hỏi ngày 9 tháng 7 năm 2010 lúc 14:58Jul 9, 2010 at 14:58

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

2

Bạn muốn:

for (i = 0; i < strlen(source); i++) {

sizeof cung cấp cho bạn kích thước của con trỏ, không phải chuỗi. Tuy nhiên, nó sẽ hoạt động nếu bạn đã tuyên bố con trỏ là một mảng:

char source[] = "This is an example.";

Nhưng nếu bạn chuyển mảng cho chức năng, điều đó cũng sẽ phân rã thành một con trỏ. Đối với các chuỗi, tốt nhất là luôn luôn sử dụng strlen. Và lưu ý những gì người khác đã nói về việc thay đổi printf để sử dụng %c. Ngoài ra, hãy tính đến các bình luận về hiệu quả của MMYERS, sẽ tốt hơn nếu chuyển cuộc gọi đến Strlen ra khỏi vòng lặp:

int len = strlen(source);
for (i = 0; i < len; i++) {

hoặc viết lại vòng lặp:

for (i = 0; source[i] != 0; i++) {

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

Pevik

4.2353 Huy hiệu vàng30 Huy hiệu bạc40 Huy hiệu đồng3 gold badges30 silver badges40 bronze badges

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:00Jul 9, 2010 at 15:00

6

Một thành ngữ phổ biến là:

char* c = source;
while (*c) putchar(*c++);

Một vài ghi chú:

  • Trong C, chuỗi được chấm dứt. Bạn lặp lại trong khi ký tự đọc không phải là ký tự null.
  • char *source = "This is an example.";
    int i;
    
    for (i = 0; i < strlen(source); i++){
    
        printf("%c", source[i]);
    }
    
    5 Tăng
    char *source = "This is an example.";
    int i;
    
    for (i = 0; i < strlen(source); i++){
    
        printf("%c", source[i]);
    }
    
    6 và trả về giá trị cũ được thu hút bởi
    char *source = "This is an example.";
    int i;
    
    for (i = 0; i < strlen(source); i++){
    
        printf("%c", source[i]);
    }
    
    6.
  • char *source = "This is an example.";
    int i;
    
    for (i = 0; i < strlen(source); i++){
    
        printf("%c", source[i]);
    }
    
    8 in một chuỗi kết thúc null, không phải là char. Đây là nguyên nhân của vi phạm truy cập của bạn.

Dave Yarwood

2.7061 Huy hiệu vàng16 Huy hiệu bạc29 Huy hiệu đồng1 gold badge16 silver badges29 bronze badges

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:05Jul 9, 2010 at 15:05

Alexandre C.Alexandre C.Alexandre C.

54.6K10 Huy hiệu vàng124 Huy hiệu bạc193 Huy hiệu Đồng10 gold badges124 silver badges193 bronze badges

12

Thay vì sử dụng strlen như đề xuất ở trên, bạn chỉ có thể kiểm tra ký tự null:

#include 

int main(int argc, char *argv[])
{
    const char *const pszSource = "This is an example.";
    const char *pszChar = pszSource;

    while (pszChar != NULL && *pszChar != '\0')
    {
        printf("%s", *pszChar);
        ++pszChar;
    }

    getchar();

    return 0;
}

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:12Jul 9, 2010 at 15:12

Mark ingmammark ingramMark Ingram

70K51 Huy hiệu vàng171 Huy hiệu bạc229 Huy hiệu đồng51 gold badges171 silver badges229 bronze badges

1

Một cách tiếp cận tối ưu hóa:

for (char character = *string; character != '\0'; character = *++string)
{
    putchar(character); // Do something with character.
}

Hầu hết các chuỗi C được chấm dứt null, có nghĩa là ngay khi nhân vật trở thành

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
9, vòng lặp sẽ dừng lại.
for (i = 0; i < strlen(source); i++) {
0 đang di chuyển con trỏ một byte, sau đó phá hủy nó và vòng lặp lặp lại.

Lý do tại sao điều này hiệu quả hơn

for (i = 0; i < strlen(source); i++) {
1 là do Strlen đã lặp qua chuỗi để tìm độ dài, do đó bạn sẽ lặp đi lặp lại hai lần (một lần nữa) với
for (i = 0; i < strlen(source); i++) {
1.

Đã trả lời ngày 28 tháng 12 năm 2019 lúc 20:17Dec 28, 2019 at 20:17

for (i = 0; i < strlen(source); i++) {
3 Trả về số byte theo yêu cầu của con trỏ
for (i = 0; i < strlen(source); i++) {
4. Bạn nên thay thế nó bằng
for (i = 0; i < strlen(source); i++) {
5 sẽ là chiều dài của chuỗi bạn đang cố gắng hiển thị.

Ngoài ra, có lẽ bạn nên thay thế

for (i = 0; i < strlen(source); i++) {
6 bằng
for (i = 0; i < strlen(source); i++) {
7 vì bạn đang hiển thị một ký tự.

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:00Jul 9, 2010 at 15:00

Một thành ngữ phổ biến là:Jacob

char* c = source;
while (*c) putchar(*c++);
14 gold badges109 silver badges164 bronze badges

0

  1. Một vài ghi chú:
  2. Trong C, chuỗi được chấm dứt. Bạn lặp lại trong khi ký tự đọc không phải là ký tự null.

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
5 Tăng
char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
6 và trả về giá trị cũ được thu hút bởi
char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
6.Jul 9, 2010 at 15:03

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
8 in một chuỗi kết thúc null, không phải là char. Đây là nguyên nhân của vi phạm truy cập của bạn.KenE

Dave Yarwood10 silver badges6 bronze badges

2.7061 Huy hiệu vàng16 Huy hiệu bạc29 Huy hiệu đồng

 #include 
 #include 

 int main(int argc, char *argv[]){

    char *source = "This is an example.";
    int length = (int)strlen(source); //sizeof(source)=sizeof(char *) = 4 on a 32 bit implementation
    for (int i = 0; i < length; i++) 
    {

       printf("%c", source[i]);

    }


 }

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:05Jul 9, 2010 at 15:02

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

Alexandre C.Alexandre C.Prasoon Saurav

54.6K10 Huy hiệu vàng124 Huy hiệu bạc193 Huy hiệu Đồng47 gold badges235 silver badges343 bronze badges

Thay vì sử dụng strlen như đề xuất ở trên, bạn chỉ có thể kiểm tra ký tự null:

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
0

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:12Jun 22, 2019 at 15:21

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

  • Mark ingmammark ingram
  • 70K51 Huy hiệu vàng171 Huy hiệu bạc229 Huy hiệu đồng

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
5 Tăng
char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
6 và trả về giá trị cũ được thu hút bởi
char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
6.Jul 9, 2010 at 15:03

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
8 in một chuỗi kết thúc null, không phải là char. Đây là nguyên nhân của vi phạm truy cập của bạn.JSBձոգչ

Dave Yarwood17 gold badges99 silver badges166 bronze badges

2.7061 Huy hiệu vàng16 Huy hiệu bạc29 Huy hiệu đồng

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:05

Alexandre C.Alexandre C.

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:00Jul 9, 2010 at 15:00

Một thành ngữ phổ biến là:Pablo Santa Cruz

char* c = source;
while (*c) putchar(*c++);
32 gold badges238 silver badges290 bronze badges

1

Một vài ghi chú:

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:00Jul 9, 2010 at 15:00

Một thành ngữ phổ biến là:Keith Randall

char* c = source;
while (*c) putchar(*c++);
1 gold badge34 silver badges54 bronze badges

Một vài ghi chú:

Next:

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
2

Trong C, chuỗi được chấm dứt. Bạn lặp lại trong khi ký tự đọc không phải là ký tự null.

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
5 Tăng
char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
6 và trả về giá trị cũ được thu hút bởi
char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
6.

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:12Jul 9, 2010 at 15:12

Mark ingmammark ingramPraveen S

70K51 Huy hiệu vàng171 Huy hiệu bạc229 Huy hiệu đồng2 gold badges42 silver badges69 bronze badges

Bạn cần một con trỏ tới char đầu tiên có chuỗi ANSI.

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
3

sẽ làm công việc

Thêm vào đó, tất nhiên bạn nên có nghĩa là

for (i = 0; i < strlen(source); i++) {
5, không phải
for (i = 0; i < strlen(source); i++) {
3.

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

Đã trả lời ngày 9 tháng 7 năm 2010 lúc 15:01Jul 9, 2010 at 15:01

UlyssesulyssesULysses

9904 Huy hiệu bạc9 Huy hiệu đồng4 silver badges9 bronze badges

Đây là 11 tuổi nhưng có liên quan đến một người đang học C. Tôi không hiểu tại sao chúng ta có tất cả các cuộc thảo luận và bất đồng này về điều gì đó rất cơ bản. Một chuỗi theo nghĩa đen trong C, tức là "Văn bản giữa các trích dẫn" có một kẻ hủy diệt null ngầm sau ký tự cuối cùng. Đừng để cái tên làm bạn bối rối. Trình kết thúc null bằng số 0. Mục đích của nó chính xác là những gì OP cần cho nó:

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
4

Một char trong C là một số nguyên 8 bit với giá trị ASCII số của ký tự tương ứng. Điều đó có nghĩa là nguồn [i] là một số nguyên dương cho đến Char [19], đó là Kẻ hủy diệt NULL sau trận chung kết '.' Nhân vật null là ASCII 0. Đây là nơi vòng lặp chấm dứt. Vòng lặp lặp qua mọi ký tự mà không quan tâm đến chiều dài của mảng.

Đã trả lời ngày 21 tháng 5 lúc 10:05May 21 at 10:05

Hướng dẫn how to print each character of a string in c++ - cách in từng ký tự của một chuỗi trong c ++

Làm cách nào để in các ký tự riêng lẻ trong một chuỗi?

Lớp học công cộng Cá nhân ..
công khai void void chính (chuỗi [] args) {.
Chuỗi chuỗi = "ký tự" ;.
// Hiển thị các ký tự riêng lẻ từ chuỗi đã cho ..
System.out.println ("Các ký tự riêng lẻ từ chuỗi đã cho:") ;.
// lặp lại thông qua chuỗi và hiển thị ký tự riêng lẻ ..

Làm thế nào bạn sẽ in ký tự trong c?

printf (định dạng char *, arg1, arg2, triệt) chức năng này in ký tự trên đầu ra tiêu chuẩn và trả về số lượng ký tự được in, định dạng là một chuỗi bắt đầu với % và kết thúc với ký tự chuyển đổi (như C, I, F, D, vân vân.). This function prints the character on standard output and returns the number of character printed, the format is a string starting with % and ends with conversion character (like c, i, f, d, etc.).

%S hoạt động như thế nào trong c?

%C liên quan đến một char (nghĩa là, một ký tự duy nhất), trong khi %s liên quan đến char * (nghĩa là một con trỏ đến một loạt các ký tự, hy vọng kết thúc không).%s deals with a char * (that is, a pointer to an array of characters, hopefully null-terminated).

Có %s trong C không?

@nofe %C dành cho một ký tự duy nhất trong khi %s dành cho một loạt các ký tự không kết thúc.%s is for a series of characters null-terminated.