前言
上一篇《C算法程式設計題(五)“E”的變換》
連續寫了幾篇有關圖形輸出的程式設計題,今天說下有關字元串的處理。
程式描述
在實際的開發工作中,對字元串的處理是最常見的程式設計任務。本題目即是要求程式對使用者輸入的串進行處理。具體規則如下:
1. 把每個單詞的首字母變為大寫。
2. 把數字與字母之間用下劃線字元(_)分開,使得更清晰
3. 把單詞中間有多個空格的調整為1個空格。
例如:
使用者輸入:
you and me what cpp2005program
則程式輸出:
You And Me What Cpp_2005_program
this is a 99cat
This Is A 99_cat
我們假設:使用者輸入的串中隻有小寫字母,空格和數字,不含其它的字母或符号。每個單詞間由1個或多個空格分隔。
假設使用者輸入的串長度不超過200個字元。
程式實作
這個題目看起來很簡單,但是想一想,用C的簡單文法實作起來還是有些麻煩的,畢竟沒有.net裡面那麼多字元串處理的方法。
題目就三個要求,就是字元轉換和處理,感覺簡單,但是卻無從下手。
還是那句話,做這種程式設計題,思路清晰了,代碼才好實作。這裡我說一種思路,如果大家有更好的,歡迎交流。
如果轉換、移除和插入一個字元,就必須知道上一個字元和下一個字元是什麼,比如第二點要求,就得知道上一個字元是英文下一個字元是數字或是上一個字元是數字下一個字元是英文,第三點也是,去空格就得知道上一個和下一個字元都是空格,第一點也是如此,變大寫就得索引是0或是上一個字元是空格和下一個字元是字元。
思路就是這樣,理清了就會發現很簡單了,然後就是一些細節處理了。
代碼我就不分析了,直接貼下代碼:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 void main()
5 {
6 char strArray[200] = {0};
7 char strResult[400] = {0};
8 int i=0,j=0,Len;
9 int nMark = 0;
10
11 printf("請輸入字元串:\n");
12 gets(strArray);
13
14 Len = strlen(strArray);
15
16 while(i<Len)
17 {
18 switch(nMark)
19 {
20 case 0:
21 {
22 if(strArray[i]>='a'&&strArray[i]<='z')
23 {
24 strResult[j++] = strArray[i++]-'a'+'A';
25 nMark = 1;
26 }
27 else if(strArray[i]>='0'&&strArray[i]<='9')
28 {
29 strResult[j++] = strArray[i++];
30 nMark = 2;
31 }
32 else if(strArray[i]==' ')
33 {
34 strResult[j++] = strArray[i++];
35 nMark = 0;
36 }
37 }
38 break;
39 case 1:
40 {
41 if(strArray[i]>='a'&&strArray[i]<='z')
42 {
43 strResult[j++] = strArray[i++];
44 nMark = 1;
45 }
46 else if(strArray[i]>='0'&&strArray[i]<='9')
47 {
48 strResult[j++] = '_';
49 strResult[j++] = strArray[i++];
50 nMark = 2;
51 }
52 else if(strArray[i]==' ')
53 {
54 strResult[j++] = strArray[i++];
55 nMark = 3;
56 }
57 }
58 break;
59 case 2:
60 {
61 if(strArray[i]>='a'&&strArray[i]<='z')
62 {
63 strResult[j++] = '_';
64 strResult[j++] = strArray[i++];
65 nMark = 1;
66 }
67 else if(strArray[i]>='0'&&strArray[i]<='9')
68 {
69 strResult[j++] = strArray[i++];
70 nMark = 2;
71 }
72 else if(strArray[i]==' ')
73 {
74 strResult[j++] = strArray[i++];
75 nMark = 3;
76 }
77 }
78 break;
79 case 3:
80 {
81 if(strArray[i]>='a'&&strArray[i]<='z')
82 {
83 strResult[j++] = strArray[i++]-'a'+'A';
84 nMark = 1;
85 }
86 else if(strArray[i]>='0'&&strArray[i]<='9')
87 {
88 strResult[j++] = strArray[i++];
89 nMark = 2;
90 }
91 else if(strArray[i]==' ')
92 {
93 i++;
94 nMark = 3;
95 }
96 }
97 break;
98 default:
99 break;
100 }
101 }
102
103 puts("轉換後的字元串為:");
104 printf("%s",strResult);
105
106 getchar();
107 }
運作結果:
作者:田園裡的蟋蟀
微信公衆号:你好架構
出處:http://www.cnblogs.com/xishuai/
公衆号會不定時的分享有關架構的方方面面,包含并不局限于:Microservices(微服務)、Service Mesh(服務網格)、DDD/TDD、Spring Cloud、Dubbo、Service Fabric、Linkerd、Envoy、Istio、Conduit、Kubernetes、Docker、MacOS/Linux、Java、.NET Core/ASP.NET Core、Redis、RabbitMQ、MongoDB、GitLab、CI/CD(持續內建/持續部署)、DevOps等等。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。
分享到:
QQ空間
新浪微網誌
騰訊微網誌
微信
更多