首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符串處理:前綴、後綴與中間星號(*)的多種操作技巧

     編輯:關於C語言

C語言字符串處理:前綴、後綴與中間星號(*)的多種操作技巧

在C語言程式設計中,字符串操作是基礎且關鍵的技能。本文針對包含星號(*)的字符串(如"*****AB**C*D*****"),詳細講解如何處理前綴、後綴及中間的星號,提供完整的代碼實現與邏輯分析。

一、刪除字符串前綴星號

核心思路:統計字符串總長度與前綴星號個數,通過指針移動覆蓋實現刪除。

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    char chr[20], *b, *p;
    int chr_num = 0, b_num = 0, i;
    
    cout << "Please input a string:" << endl;
    gets(chr);
    
    // 統計字符串總長度
    p = chr;
    while(*p++) chr_num++;
    
    // 統計前綴星號個數
    b = chr;
    while(*b++ == '*') b_num++;
    
    // 刪除前綴星號
    for(i = 0; i < chr_num - b_num; i++)
        chr[i] = chr[i + b_num];
    chr[i] = '\0';
    
    cout << "The result:" << endl;
    puts(chr);
    return 0;
}

二、刪除字符串後綴星號

從字符串末尾向前掃描,統計後綴星號數量,直接截斷字符串。

// 統計後綴星號
t = chr + chr_num - 1;
while(*t-- == '*') t_num++;

// 刪除後綴星號
chr[chr_num - t_num] = '\0';

三、同時刪除前綴與後綴星號

結合前兩種方法,先統計前綴與後綴星號數,再通過一次循環完成中間內容的前移。

for(i = 0; i < chr_num - b_num - t_num; i++)
    chr[i] = chr[i + b_num];
chr[i] = '\0';

四、刪除字符串中間的星號(保留首尾星號)

雙指針法:b指向首個非星號字符,t指向末尾非星號字符,中間遍歷複製非星號字符,最後拼接尾部星號。

// 定位有效內容區間
b = chr; while(*b++ == '*');
t = chr + chr_num - 1; while(*t-- == '*');

p = b;
while(b <= t) {
    if(*b != '*') *p++ = *b;
    b++;
}
// 複製尾部星號
++t;
while(*t) *p++ = *t++;
*p = '\0';

五、將前綴星號移動到字符串末尾

先刪除前綴,再在末尾補充相同數量的星號。

for(i = 0; i < chr_num - b_num; i++)
    chr[i] = chr[i + b_num];
while(i < chr_num) chr[i++] = '*';
chr[i] = '\0';

六、將後綴星號移動到字符串開頭

從後向前移動有效內容,騰出空間放置後綴星號。

for(i = chr_num - t_num - 1; i >= 0; i--)
    chr[i + t_num] = chr[i];
for(i = 0; i < t_num; i++)
    chr[i] = '*';

七、限制前綴星號不超過n個

若前綴星號超過n,保留n個,其餘刪除。

if(b_num > n) {
    for(i = 0; i < chr_num - b_num; i++)
        chr[i + n] = chr[i + b_num];
    chr[i + n] = '\0';
}

八、限制後綴星號不超過n個

同理,截斷多餘的後綴星號。

if(t_num > n)
    chr[chr_num - t_num + n] = '\0';

總結與建議

  • 所有操作均基於字符數組與指針算術,無需額外庫支持
  • 注意gets()有緩衝區溢出風險,實際項目建議使用fgets()
  • 處理邊界情況:空字符串、全星號字符串、無星號字符串
  • 可封裝為通用函數庫,提高代碼復用性

掌握這些基礎字符串操作模式,能顯著提升C語言底層開發能力,為嵌入式系統、系統編程等領域打下堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved