C語言 | 指向指針的指針排序

2021-02-20 C語言入門到精通

「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」

這道理放在C語言學習上也一併受用。在編程方面有著天賦異稟的人畢竟是少數,我們大多數人想要從C語言小白進階到高手,需要經歷的是日積月累的學習。那麼如何學習呢?當然是每天都練習一道C語言題目!!

作者

閆小林

白天搬磚,晚上做夢。我有故事,你有酒麼?

例81:C語言實現用指向指針的指針的方法對5個字符串排序並輸出。 
解題思路:讀者看著道題的時候,首先要知道什麼時指針,指向指針的指針應該怎麼用,一般在開發中不這樣用,讀者要看明白,這個很鍛鍊思維的。

#include<stdio.h>//頭文件
#include<string.h>
#define LINEMAX 20 //定義字符串的最大長度
int main()
{
  void sort(char **point);//函數聲明
  int i;//定義整型變量
  char **point,*pstr[5],str[5][LINEMAX];//定義變量
  for(i=0;i<5;i++)
  {
    pstr[i]=str[i]; //將第i個字符串的首地址賦予指針數組pstr的第i個元素
  }
  printf("輸入五個字符串:\n");//提示語句
  for(i=0;i<5;i++)
  {
    scanf("%s",pstr[i]);
  }
  point=pstr;
  sort(point);//調用sort函數
  printf("————————————\n");//提示語句
  printf("輸出排序後的結果:\n");//提示語句
  for(i=0;i<5;i++)
  {
    printf("%s\n",pstr[i]);
  }
  return 0;//主函數返回值為0
}
void sort(char **point)//冒泡排序算法實現
{
    int i,j;//定義整型變量
  char *temp;//定義字符指針變量
  for(i=0;i<5;i++)
  {
    for(j=i+1;j<5;j++)
    {
      if(strcmp(*(point+i),*(point+j))>0)//比較後交換字符串地址
      {
        temp=*(point+i);
        *(point+i)=*(point+j);
        *(point+j)=temp;
      }
    }
  }
}

輸入五個字符串:
China
American
Japan
Back
Different
————————————
輸出排序後的結果:
American
Back
China
Different
Japan

--
Process exited after 2.574 seconds with return value 0
請按任意鍵繼續. . .


以上,如果你看了覺得對你有所幫助,就給小林點個讚,分享給身邊的人叭,這樣小林也有更新下去的動力,跪謝各位父老鄉親啦~

相關焦點

  • C指針的這些使用技巧,掌握後立刻提升一個Level
    C語言的小夥伴來說,很容易就從根本上理解指針到底是什麼、怎麼用,這也讓我堅信一句話;用心寫出的文章,一定會被讀者感受到!記得我在校園裡學習C語言的時候,南師大的黃鳳良老師花了大半節課的時間給我們解釋指針,現在最清楚地記得老師說過的一句話就是:指針就是地址,地址就是指針!二、八個示例 1.
  • C語言學習指針的秘笈:輕鬆理解(*(void (*)())t)()
    在C語言裡,指針的問題覺得很複雜麼?學習指針時,是不是常常被星星撞得很暈?
  • 抓住指針的精髓,才算掌握了 C 語言的靈魂!
    ,指針是C的靈魂。所以學好指針很關鍵,這裡寫一些指針方面的容易錯的或者易混淆的知識點還有自己不會的盲點,以便之後複習時用。數組傳參和數組形參1.1 數組傳參如果函數遇到數組傳參的,不論是什麼形式的形參,只要是數組,那麼被調函數都將這個形參都當做指針來使用。
  • C語言入門必備書籍
    《C語言入門經典》例子簡單生活化,而且每個例子分析很細。章節安排合理,章末的例子還特別注重思路的引導,而且分析起來特別有成就感,這本書是自學過程的一本好書。這本書和《專家編程》《C缺陷和陷阱》可以並稱C語言(進階書)三傑。本書的部分內容更適合有C基礎的人看。
  • LeetCode 例題精講 | 04 用雙指針解 Two Sum:縮減搜索空間
    如果你直接翻答案的話,會發現這就是一道普通的雙指針解法。這就是本題的雙指針解法了。雙指針解法的正確性解釋 我們考慮兩個指針指向的數字,A[i] 和 A[j]。由於數組是有序的,在一開始,A[i] 是數組中最小的數字,A[j] 是最大的數字。我們將 A[i] + A[j] 與目標和 target 進行比較,則可能有兩種情況:A[i] + A[j] 大了。
  • C/C++ 筆試、面試題目大匯總
    主要原因是這四個操作符沒有side effect,因此,它們必須構造一個對象作為返回值,可選的方案包括:返回一個對象、返回一個局部變量的引用,返回一個new分配的對象的引用、返回一 個靜態對象引用。根據前面提到的引用作為返回值的三個規則,第2、3兩個方案都被否決了。靜態對象的引用又因為((a+b) == (c+d))會永遠為true而導致錯誤。所以可選的只剩下返回一個對象了。6.
  • C語言入門必備的18個經典程序
    { c1=c[i];c[i]=c[j];c[j]=c1; } printf("%s\n",c); }指針法:void invert(char *s){int i,j,k; char t; k=strlen(s); for(i=0,j=k-1;i<k/2;i++,j--)
  • C語言必背18個經典程序
    200],c1; int i,j,k; printf("Enter a string: "); scanf("%s",c); k=strlen(c); for (i=0,j=k-1;i<k/2;i++,j--) { c1=c[i];c[i]=c[j];c[j]=c1; } printf("%s\n",c);}
  • C語言太簡單?這14道C語言謎題,你能答對幾個?
    本文展示了14個C語言的迷題以及答案,代碼應該是足夠清楚的,而且有相當的一些例子可能是我們日常工作可能會見得到的。
  • 圖解排序算法:快速排序
    我們用「兩個指針」(就是擋板)把數組分成「三個區間」,那麼那麼初始化時,我們要保證「未排序區間」能夠包含除了 3 之外的所有元素,所以這樣左邊和右邊的區間就成了:(j, array.length -2]:放比 3 大的數
  • C語言 | 輸出月份的英文
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • C語言 | 選擇1或2調用max或min
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • 2016年,C語言該怎樣寫
    本文將告訴你現代C語言該怎麼寫。C語言的首要原則是——能不寫C語言就不寫。如果一定要寫,請遵守現代規則。C語言誕生於20世紀70年代初。人們在其發展的各個階段都在「學習C語言」,但在學習C語言之後,知識往往停滯不前,從開始學習它的那年起積攢起不同觀點。很重要的一點是,用C語言開發,不要再繼續認為「那是我在八零或者九零年代學習的東西」。
  • C語言 | 對n個字符開闢連續的存儲空間
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • C 語言程序設計---入門篇
    從本篇文章開始,我將分享 C 系列,將 C 語言的方方面面,從最基礎的語法帶領大家入門
  • 一個資深C語言工程師說如何學習C語言
    今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面著手。了解一些基本知識一.C語言的背景就個人感觸,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發展史。C語言屬於高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。
  • ​LeetCode刷題實戰148:排序鍊表
    題意給你鍊表的頭結點 head ,請將其按 升序 排列並返回 排序後的鍊表 。你可以在 O(n log n) 時間複雜度和常數級空間複雜度下,對鍊表進行排序嗎?解題https://blog.csdn.net/qq_41855420/article/details/87901524思路分析:由於題目特意要求 O(n log n) 時間複雜度和常數級空間複雜度 所以不能使用冒泡、計數排序啥的,比較符合要求的就是歸併排序。歸併排序:排序一段序列分為排序前部分、後部分,再合併兩個已經排序好的部分。