30/09/2018, 19:02

Thắc mắc về 1 đoạn trong code tính tổng các chữ số trong chuỗi

> #include <stdio.h> 
> #include <conio.h> 
> #include<string.h>
> int main() 
> { 
>      char str[50]; 
>      int i=0,j,tong=0,n; 
>      printf("Nhap 1 xau: "); 
>      gets(str); 
>      while(i<=strlen(str)-1) 
>          if(str[i]<='9' && str[i]>='0') 
>           { 
>            j=i; 
>            n=0;            
>            while(j<=strlen(str)-1 && (str[j]<='9' && str[j]>='0')) 
>             { 
>                n=10*n+(int)str[j]-48; 
>                j++; 
>             } 
>             printf("+ %d ",n); 
>             tong+=n; 
>             i=j; 
>            } 
>           else i++; 
>      printf("= %d",tong); 
>      getch();     
> }
Viruts viết 21:07 ngày 30/09/2018

Ai giải thích giúp em đọan vòng while
> while(j<=strlen(str)-1 && (str[j]<=‘9’ && str[j]>=‘0’))
> {
> n=10n+(int)str[j]-48;
> j++;
> }
Tại sao cái if trên không tính đk tổng ngay mà phải thêm vòng while nữa và cái đọan n=10
n+(int)str(j)-48 là sao ạ?

*grab popcorn* viết 21:18 ngày 30/09/2018

Cái trên ý tác giả muốn là

cho chạy code trong vòng lặp khi j<=strlen(str)-1;
và nếu kí tự thứ j là 1 chữ số.
Và cái (int)str[j] - 48; là phép toán đổi ký tự số thành số
Do đau thì trong bảng ASCII số 0 có mã ASCII = 48.
-> ‘0’ = 48.
‘0’ - 48 = 0
‘1’ - 48 = 1
v.v
Nói chung bạn tìm hiểu lại ký tự trong C là hiểu.

Viruts viết 21:14 ngày 30/09/2018

ak mk hiểu rồi . thank bạn yeeee

Bài liên quan
0