程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-【C語言編寫函數問題】從鍵盤輸入一個字符串,編寫程序完成 如下功能:

c語言-【C語言編寫函數問題】從鍵盤輸入一個字符串,編寫程序完成 如下功能:

編輯:編程綜合問答
【C語言編寫函數問題】從鍵盤輸入一個字符串,編寫程序完成 如下功能:

(1) 編寫一個函數,提取一個字符串中的所有整數。整數提取規則為:連續
的數字字符構造一個整數,如果整數位數超過 6 位,則在第 7 位開始構建一
個新的整數。
(2) 編寫一個函數,對(1)步提取的所有整數按照從小到大的順序排序。
(3) 編寫一個函數,輸出提取的所有整數。
(4) 編寫相關測試程序。
(沒有學到指針)麻煩大神們給個詳細的程序,做了幾個小時了一直不成功。不知道在問題1中返回的值如何返回,並在2中使用,求詳細解答,謝謝啦

最佳回答:


#include “stdio.h”
#include “stdlib.h”
char string[1000]; //這個是您的字符串樣本
int num[100]; //這個是字符串轉換後的數值數組
int ad_num[100000];//這個是排序時所用的間接數組

int Convert(char *s);
void Sort(int c);
void print(int c);
int main()
{
int num_Count;
printf("請輸入您的字符串文本:\n"); //現在我們輸入我們的字符串樣本,按下回車鍵表示輸入結束
scanf("%s", string);

  num_Count = Convert(string);        //在這裡把字符串文本中的數字都提取出來
  printf("字符串轉換後如下所示:\n");
for (int i = 0; i < num_Count; i++)  printf("%d  ", num[i]);

  printf("\n經過排序後的數值如下所示:\n");
  Sort(num_Count);                   //在這裡調用函數進行排序
  print(num_Count);
  printf("程序運行完畢,按任意鍵退出!");
  system("pause");
  return 0;

}

int Convert(char *s)
{
int count=0, temp=0,a=0;
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] >= '0'&&s[i] <= '9')
{
temp = temp * 10 + (s[i] - '0'); //temp用來提取數字
if (temp > 99999) //如果數值大於99999,則把數值經過處理後賦值給num數組中的某一個元素
{
num[a] = (temp - (s[i] - '0')) / 10; //這個就是處理過程,因為檢測時數值已經超過六位數,所以要減去個位數再 / 10
temp = s[i] - '0'; //把溢出的這個字符值保存在temp中
a++; //a在這個函數裡只是用來當作num的下標而已
count++;
}
}
}
num[a] = temp; //最後不要忘了我們還有一個不大於99999的數值呢。。。
count++;
return count; //這個count用來表示提取出的數字可以組成多少個數值
}

void Sort(int c) //抱歉,其它的排序算法不記得啥樣了,所以這裡用了一個本人最熟悉的吧
{
int a = 0;
for (int i = 0; i < c; i++) ad_num[num[i]]++; //這個循環是用來把num裡的所有數值映射到ad_num數組中,每映射一次,對應的標記+1

  for (int i = 0; i < 100000; i++) //這個循環用來檢測六位數裡面哪些數值曾經出現在num裡
  {
        while (ad_num[i]>0) //因為ad_num裡的這個元素大於0,這意味著對應的i數值至少在曾經的num裡出現過一次
        {
              num[a++] = i;  //很簡單,賦值即可
              ad_num[i]--;   //自然的,ad_num的標記要減一次
        }
  }

}

void print(int c) //輸出被排序過的num數組
{
for (int i = 0; i < c; i++) printf("%d ", num[i]);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved