輸入一個字串,內有數字和非數字字元,例如:A123x456 17960? ,302tab5876,將其中連續的數字作為一個整數,依次存放到一陣列a中。例如,123放在a[0],456放在a1[1].....統計共有多少個整數,並輸出這些數
阿新 • • 發佈:2020-07-13
輸入一個字串,內有數字和非數字字元,例如:A123x456 17960? ,302tab5876,將其中連續的數字作為一個整數,依次存放到一陣列a中。例如,123放在a[0],456放在a1[1].....統計共有多少個整數,並輸出這些數。
解題思路: 遇到數字字元,則開始統計連續數字字元的個數,統計完畢後,則從右往左每次乘以10(除了個位數)作為數字的單位,最終相加得到數字;然後越過這個數字,從後邊繼續查詢。
答案:
#include<stdio.h> #include<string.h> void count_digit(char *str) { int digit[32], count = 0; char *ptr = str; int i = 0, str_len = strlen(str); while (i < str_len) { if (*(ptr+i) >= '0' && *(ptr+i) <= '9') { int len = 1;//用於統計連續數字的個數 while (*(ptr + i + len) >= '0' && *(ptr + i+ len) <= '9' && (i+len) < str_len) {//找出從當前位置連續數字的個數 len++; } int sum = *(ptr + i + len - 1) - '0';//先獲取個位數的資料 int unit = 1;//每一位的單位,從十位開始每次乘以10作為單位 for (int j = len - 2; j >= 0; j--) {//從右往左逐個處理 unit *= 10; sum += (*(ptr + i + j) - '0') * unit; } digit[count++] = sum; i += len; // i需要加上len的長度,越過這個數字,防止一個連續數字中的字元重複處理 continue; } i++; } for (int i = 0; i < count; i++) { printf("%d ", digit[i]); } return; } int main() { char buf[1024] = { 0 }; printf("Please enter a string with numbers:\n"); gets_s(buf, 1024); count_digit(buf); printf("\n"); system("pause"); return 0; }