1. 程式人生 > >C語言 函式實現字串互換

C語言 函式實現字串互換

要利用函式實現字串的互換,首先得弄懂一個概念,看看下面的程式碼:

char *str1 = "hello";
char *str2 = "world";

第一行程式碼的意思是定義了一個char*型別的指標,我們將關注的是程式碼的儲存問題,這裡str變數是儲存於棧區的,而”hello”, 則是存放在字串常量區,我們應該知道,字串常量區的資料是不可更改的。所以無法直接更改“hello”和“world”的儲存位置來達到交換的目的,否則會報段錯誤。 正確的思路是,再分別定義一個指標來指向str1和str2,即指向指標的指標(二級指標)——把函式的引數定義為二級指標,作用是為了通過交換棧區的str1, 和str2儲存的字串所在記憶體空間的地址來達到目的, 如圖:
這裡寫圖片描述

圖片中,假設hello本來的儲存位置為1000,world本來的儲存位置為1004,即在交換前str1和str2所儲存的位置,此時指標指向為紅線, 我們的程式碼要實現的功能是交換str1和str2 中的儲存的地址,交換後由藍色小框標出,最終要達到的目的由藍色線標出。

程式碼實現:

#include <stdio.h>

void swop(char **str1, char **str2)
{
    char *temp = NULL;

    temp = *str1;
    *str1 = *str2;
    *str2 = temp;
}

int main()
{
    char *str1
= "hello"; char *str2 = "world"; printf("str1 = %s, str2 = %s\n", str1, str2); swop(&str1, &str2); printf("str1 = %s, str2 = %s\n", str1, str2); return 0; }

這裡寫圖片描述

相關推薦

C語言 函式實現字串互換

要利用函式實現字串的互換,首先得弄懂一個概念,看看下面的程式碼: char *str1 = "hello"; char *str2 = "world"; 第一行程式碼的意思是定義了一個char*型別的指標,我們將關注的是程式碼的儲存問題,這裡str變數是儲存

C語言指標實現字串翻轉函式

#include <stdio.h> void overturn(char *src,char *dest) { char *p = src; char *q = dest; while(*p != '\0') p++; while(p != sr

C語言 指標實現字串連線

C語言 指標實現字串連線 #include <stdio.h> #include <string.h> int main() { char s1[100], s2[100], s3[100]; char *p1=NULL; char *p2=NULL; char

C語言實現字串反轉(只有單詞反轉,單詞裡的字母不反轉)

用C/C++來實現字串的反轉。比如:字串”I am a good developer!”反轉之後變成了”developer! Good a am I”。(只有單詞反轉,單詞裡的字母不反轉) 用c語言來搞先到字串末尾然後挨個掃描碰到非空格wordLen++否則先處理wordLe

C語言------如何實現字串陣列和整形陣列在終端上任意輸

我是新手, 學習C語言過程中,練習程式設計時常會遇到輸入任意字串(不越界的情況下任意輸入),或者是輸入任意長度的整形陣列,下面就是我的一些關於任意字串和陣列輸入程式碼的整理. 1. 字串      

C語言中求字串長度的函式my_strlen()的幾種實現方法

C語言中求字串長度的函式的幾種實現方法 1.最常用的方法是建立一個計數器,判斷是否遇到‘\0’,不是’\0’指標就往後加一。 int my_strlen(const char *str) { assert(str != NULL);//此句判段str是否為空指標(事實上這條語

C語言 不使用strcpy 函式實現字串複製功能

#include<stdio.h> void Copy_string(char* str1, char* str2);   //函式宣告 int main() {     char str1[20];     char str2[20];     puts("請輸入字串str1:");   

C語言中返回字串函式的四種實現方法

其實就是要返回一個有效的指標,尾部變數退出後就無效了。 使用分配的記憶體,地址是有效 char   *fun() {         char*   s   =   (char*)calloc(100,   sizeof(char*)   );         if   (s)                

C語言實現一個函式翻轉字串

實現一個函式翻轉字串 思路:->實現翻轉 1.翻轉即前後交換 2.對於字串前後交換直到中間一個字元終止迴圈 3.令(start++)<(end–)迴圈條件不滿足退出 #incl

[c語言]對各種字串函式實現strcpy,strcat,strstr,strchr,strcmp,memcpy,memmove

1.模擬實現strcpy //1.模擬實現strcpy(字串拷貝) #include<stdio.h> #include<assert.h> char * my_strcpy(char *dest,const char *str) {

C語言實現一個函式,可以左旋字串中的k個字元。

.實現一個函式,可以左旋字串中的k個字元。 AABCD左旋一個字元得到ABCDA AABCD左旋兩個字元得到BCDAA 思路: 1.如果直接進行左移,肯定會存在陣列前面的元素丟失。 解決辦法:

2016 C語言面試題——字串函式實現

2016 C語言面試題——字串函式 前言:最近準備找工作了,所以需要做一些準備。先從基本的字串函式的實現開始。如果有發現什麼問題或有什麼疑惑,請及時評論。 strcat /************

c語言實現翻轉字串函式reverse_string

函式reverse_string(char * string) 實現:將引數字串中的字元反向排列。 要求:不能使用C函式庫中的字串操作函式。 #include <stdio.h> #in

C語言指標實現兩個數的互換

#include <stdio.h> void change1(int a, int b)//形參與實參不是同一個變數{ int t; t = a; a = b; b = t; } void change2(int * a, int * b)//只是把兩個變數的地址儲存的位置換了,但是變數的值

c語言如何實現函式過載

c語言如何實現函式過載 c語言中不允許有同名函式,因為編譯時函式命名是一樣的,不像c++會新增引數型別和返回型別作為函式編譯後的名稱,進而實現過載。如果要用c語言顯現函式過載,可通過以下方式來實現: 使用函式指標來實現,過載的函式不能使用同名稱,只是類似的實現了函式過載功能

C語言字元和字串處理函式(二)strchr,strpbrk,strstr

查詢字元或者字串 查詢一個字元:和和和strchr()。 函式返回一個指向STR中CH首次出現的位置,當沒有在STR中找CH就報道檢視NULL。 查詢任意字元:strpbrk()  函式返回一個指標,它指向字串STR2中任意字元在字串STR1首次出現的位置,如果不存在返

軟體素材---linux C語言:拼接字串函式 strcat的用例(與char陣列聯合使用挺好)

【標頭檔案】#include <string.h> 【原型】 1 char *strcat(char *dest, const char *src); 【引數】: dest 為目標字串指標,src 為源字串指標。

C語言函式返回值的實現方法和誤區

例項:你們認為這三個函式能正常返回嗎?  int func1(int a , int b) { int c = 0; c = a + b; return c; } char * func2() { char *strTmp = "abs"; return str

C語言模擬實現函式strlen的三種方法

學習之路無止境,漫漫長夜,我愛程式設計。 今天練習的是用C語言來簡單實現庫函式strlen。 首先strlen 函式的作用是求出字串長度,眾所周知,在C語言中,字串是以字串陣列的形式儲存的,並且以’\0’為結束標誌。先讓我們看看strlen庫函式的引數即返回值

c語言網-1477-字串輸入輸出函式

題目描述 編寫函式GetReal和GetString,在main函式中分別呼叫這兩個函式。在讀入一個實數和一個字串後,將讀入的結果依次用printf輸出。 兩次輸入前要輸出的提示資訊分別是" please  input  a  number:\n”和" please