字串內容重排序

2021-09-12 13:24:20 字數 1689 閱讀 3736

題目:字串內容重排序。實現對給定字串(字串中包含英文本母、數字、符號),經過處理後的字串按照"字母、數字、符號"的順序存放。要求是不改變字母、數字等在原串中先後次序例如字串"a,2.d?3!e4r87we79",處理後輸出結果為"aderwe2348779,.?!"

分析:方法(1):逐次掃瞄原串,是字母的放在乙個動態開闢的地方,是數字的放在另一塊地方是其它字元的再放在另一塊地方,最後將這三部分按順序拷貝到str中,保證字母在前數字在中間,最後是字元,而且同類字元的相對次序保持不變。

void parse_string1(char* str)

else if (isdigit(*str))//如果是數字

else

}str = ret;

strncpy(str, a, i);

strncpy(str+i, b, j);

strncpy(str+i+j, c, k);

str[i + j + k] = '\0';

delete a;

delete b;

delete c;

}

方法(2):可以統計字母、數字出現的次數,這就得出其它字元的個數,然後只需要開闢乙個臨時空間即可,比方法(1)少開了兩份空間。

void parse_string2(char* str)

else if (isdigit(str[i]))//數字

}int other_count = len - alpha_count - digit_count;

//x,y,z分別是字母、數字、其它字元的起始位置,得放成全域性變數(又被區域性變數坑了好久)

int x = 0;

int y = alpha_count;

int z = alpha_count + digit_count;

//將字元按照字母、數字、特殊字元放進臨時空間tmp中

for (int i = 0; i < len; i++)

else if (isdigit(*str))

else

str++;

} str = ret;//由於上面str移到後面了,因此應該將str恢復置原位

strncpy(str, tmp, len);

str[len - 1] = '\0';

}

方法(3):由於以上兩種方法都要開闢額外的空間。我們可以定義乙個compare(a,b)函式

用於判斷當前字元和下乙個字元是否需要交換(需要交換有三種可能:(1)數字在字母前面(2)其它字元在字母前面(3)其它字母在數字前面)除此之外,其它的情況都不需要交換。這樣以來,就會使得將字母放在前面,數字放在中間,其它字元放在後面,並且同一種字元的相對位置不變類似於冒泡,如果發現有一次的比較過程中,一次都沒有交換,則說明字串行已經有序,則直接跳出迴圈,無需繼續比較。

bool compare(char a, char b)

else if (isdigit(a))//a是數字,b是字母 }

else//a是其它,b是數字或者字母 }

void parse_string3(char* str)

} --len;//每將乙個字元"安全"的放在最後,需要調整的長度減1

if (exchange==1)//說明一次交換都沒有,即已經是字母、數字、其它的順序了

}}

字串內容

那麼,你是否知道字串也是物件,同樣具有方法。這些方法可以完成包括檢驗一部分字串和去除空格在內的各種工作。你在程式中使用的字串都是str類的物件 還真不知道字元是物件。usr bin python filename str methods.py name swaroop this is a strin...

awk根據指定字串內容排序

最近需要對乙個markdown 進行排序,關鍵字段是在第乙個的兩個 中間,如下 8 string to integer atoi c medium 5 longest palindromic substring c medium 17 letter combinations of a phone n...

字串 字串排序

頻率統計 將頻率轉換為索引 資料分類 回寫頻率統計 統計每個字元出現的次數 將頻率轉換為索引 確定不同字元首位置 從右到左檢查檢查鍵中的字元 public class lsd public class msd public static void sort string a private stat...