一文聊聊C語言中的字串操作(大小寫轉換、比較、排序等)

2022-03-30 13:00:06
字串是 C語言 程式中經常處理的物件之一,下面本篇文章就來帶大家聊聊C語言中的字串處理,瞭解一些字串操作函數,希望對大家有所幫助!

字串在C語言裡使用非常多,因為很多資料處理都是文字,也就是字串,特別是裝置互動、web網頁互動返回的幾乎都是文字資料。

字串本身屬於字元陣列、只不過和字元陣列區別是,字串結尾有’\0’。 字串因為規定結尾有'\0',在計算長度、拷貝、查詢、拼接操作都很方便。

1. 字串的定義

char buff[]="我是一個字串";
char a[]="1234567890";
char b[]="abc";
char c[]={'a','b','c','\0'};

在普通的字元陣列結尾加一個 \0 就變成了字串。

2. 處理字串裡字母大小寫

將字串裡所有大寫字母全部換成小寫字母。或者小寫字母全部換成大寫字母。可以通過形參進行區分。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(char *str,int flag);
int main()
{
    char buff[100];
    printf("從鍵盤上輸入字串:");
    scanf("%s",buff);
    printf("源字串:%s\n",buff);
    func(buff,0);
    printf("大寫轉換小寫:%s\n",buff);
    func(buff,1);
    printf("小寫轉大寫:%s\n",buff);
    return 0;
}

//函數功能: 大寫小寫轉換
//flag=0表示大寫轉換小寫  =1表示小寫轉大寫
void func(char *str,int flag)
{
    int data;
    while(*str!='\0')
    {
        if(flag)
        {
            if(*str>='a'&& *str<='z') //小寫
            {
                *str=*str-32;
            }
        }
        else
        {
            if(*str>='A'&& *str<='Z') //小寫
            {
                *str=*str+32;
            }
        }
        str++;
    }
}

3. 從鍵盤上錄入2個字串,判斷是否相等

#include <stdio.h>
int main()
{
    char str1[100];
    char str2[100];
    int i=0;
    /*1. 錄入資料*/
    printf("輸入字串1:");
    scanf("%s",str1);
    printf("輸入字串2:");
    scanf("%s",str2);
    /*2. 比較字串*/
    while(str1[i]!='\0'||str2[i]!='\0')
    {
        if(str1[i]!=str2[i])break;
        i++;
    }
    if(str1[i]=='\0'&&str2[i]=='\0')
    {
        printf("字串相等.\n");
    }
    else
    {
        printf("字串不相等.\n");
    }
    return 0;
}

4. 從鍵盤上錄入一個字串,按照小到大的順序排序

#include <stdio.h>
#include <string.h>

int main()
{
    char str1[100];
    int len=0;
    int i,j;
    int tmp;
    printf("輸入要排序的字串:");
    scanf("%s",str1);
    len=strlen(str1);
    //開始排序
    for(i=0;i<len-1;i++)
    {
        for(j=0;j<len-1-i;j++)
        {
            if(str1[j]>str1[j+1])
            {
                tmp=str1[j];
                str1[j]=str1[j+1];
                str1[j+1]=tmp;
            }
        }
    }
    printf("排序之後的字串:%s\n",str1);
    return 0;
}

5. 從鍵盤上輸入一個字串,轉為整數輸出

#include <stdio.h>
#include <string.h>
int main()
{
    //"123"
    char str[100];
    int data=0;
    int i=0;
    printf("從鍵盤上輸入字串:");
    scanf("%s",str);
    while(str[i]!='\0')
    {
        data*=10;//data=0 data=10 data=120
        data+=str[i]-'0';//data=1 data=12 data=123
        i++;
    }
    printf("data=%d\n",data);
    return 0;
}

6. 字串刪除

從鍵盤上錄入一個字串,刪除字串裡指定的單詞,輸出結果。

比如:原字串 」akjbcds123dfjvbf123fdvbfd123」

刪除單詞:「123」

輸出的結果:」akjbcdsdfjvbffdvbfd」

#include <stdio.h>
#include <string.h>

int main()
{
    char str1[100];
    char str2[100];
    int i=0,j=0;
    int str2_len=0;
    /*1. 錄入資料*/
    printf("輸入源字串:");
    scanf("%s",str1);
    printf("輸入要刪除的字串:");
    scanf("%s",str2);
    /*2. 計算要刪除字串的長度*/
    str2_len=strlen(str2);
                
    /*3. 查詢字串*/
    for(i=0;str1[i]!='\0';i++)
    {
        //比較字串
        for(j=0;str2[j]!='\0';j++)
        {
            if(str1[i+j]!=str2[j])break;
        }
        if(str2[j]=='\0')
        {
            //4. 刪除字串---後面向前面覆蓋
            for(j=i;str1[j]!='\0';j++)
            {
                str1[j]=str1[j+str2_len];
            }
            str1[j]='\0';
            i--;
        }
    }
    //5. 輸出結果
    printf("str1=%s\n",str1);
    return 0;
}

7. 字串插入

從鍵盤上錄入一個字串,從指定位置插入一個字串,再輸出結果。

比如:原字串「1234567890」

(1). 從指定位置插入新的單詞。 比如 從第2個下標插入一個「ABC」字串。

結果: 「123ABC4567890」

#include <stdio.h>
#include <string.h>

int main()
{
    char str1[100];
    char str2[100];
    int addr=0;
    int str1_len;
    int str2_len;
    int i;
    /*1. 錄入資料*/
    printf("錄入源字串:");
    scanf("%s",str1);
    printf("錄入要插入的字串:");
    scanf("%s",str2);
    printf("輸入要插入的下標位置:");
    scanf("%d",&addr);
    str1_len=strlen(str1); //3
    str2_len=strlen(str2); //2
    
    /*2. 完成插入*/
    //完成資料移動
    for(i=str1_len-1;i>=addr;i--)
    {
        str1[i+str2_len]=str1[i];
    }
    //資料替換
    for(i=0;i<str2_len;i++)
    {
        str1[i+addr]=str2[i];
    }
    str1[str1_len+str2_len]='\0';
    /*3. 輸出資料*/
    printf("str1=%s\n",str1);
    return 0;
}

8. 字串替換

從鍵盤上錄入一個字串,將指定單詞替換成想要的單詞。

比如:原字串「123jfvfdj123dkfvbfdvdf」

想要將「123」替換成「888」或者「8888」或者「88」

#include <stdio.h>
#include <string.h>

int main()
{
    char str1[100];
    char str2[100];
    char str3[100];
    int str1_len=0;
    int str2_len=0;
    int str3_len=0;
    int i,j;
    int cnt=0;
    /*1.準備資料*/
    printf("輸入源字串:");
    scanf("%s",str1);
    printf("輸入查詢的字串:");
    scanf("%s",str2);
    printf("輸入替換的字串:");
    scanf("%s",str3);
    /*2. 計算長度*/
    str1_len=strlen(str1);
    str2_len=strlen(str2);
    str3_len=strlen(str3);
    /*3. 字串替換*/
    for(i=0;i<str1_len;i++)
    {
        //查詢字串
        for(j=0;j<str2_len;j++)
        {
            if(str1[i+j]!=str2[j])break;
        }
        //如果查詢成功就進行替換
        if(j==str2_len)
        {
            //總長度變短了
            if(str2_len>str3_len)
            {
                cnt=str2_len-str3_len; //差值
                //完成資料向前移動--覆蓋
                for(j=i+str2_len-cnt;j<str1_len;j++)
                {
                    str1[j]=str1[j+cnt];
                }
                str1[str1_len-cnt]='\0';
            }
            //總長度變長了
            else if(str2_len<str3_len)
            {
                cnt=str3_len-str2_len; //差值
                //完成資料向後移動
                for(j=str1_len;j>=i+str2_len;j--)
                {
                    str1[j+cnt]=str1[j];
                }
                str1[str1_len+cnt]='\0';
            }
            //替換
            for(j=0;j<str3_len;j++)
            {
                str1[i+j]=str3[j];
            }
            //重新計算長度
            str1_len=strlen(str1);
        }
    }
    /*4. 完成字串列印*/
    printf("str1=%s\n",str1);
    return 0;
}

相關推薦:《C視訊教學

以上就是一文聊聊C語言中的字串操作(大小寫轉換、比較、排序等)的詳細內容,更多請關注TW511.COM其它相關文章!