日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

04_ReplaceBlank

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 04_ReplaceBlank 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

操作兩個指針,一個處理原來的字符串,一個處理新字符串,前者不碰到空格的話,就與后者同步。

否則后者增加%20.

代碼如下:

#include<iostream> #include<string> using namespace std;/*length 為字符數組string的總容量*/ void ReplaceBlank(char string[], int length) {if (string == NULL && length <= 0)return;/*originalLength 為字符串string的實際長度*/int originalLength = 0;int numberOfBlank = 0;int i = 0;while (string[i] != '\0'){++originalLength;//統計字符串長度if (string[i] == ' ')++numberOfBlank;//統計字符串中的空格數量++i;}/*newLength 為把空格替換成'%20'之后的長度*/int newLength = (originalLength -numberOfBlank) + numberOfBlank * 3;// 因為這里空格也占據一個位置if (newLength > length)return;int indexOfOriginal = originalLength;//原始字符串的下標int indexOfNew = newLength;//新的字符串的下標while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){if (string[indexOfOriginal] == ' '){string[indexOfNew--] = '0';//這里是先賦值,然后-1,下同string[indexOfNew--] = '2';string[indexOfNew--] = '%';--indexOfOriginal;}else{string[indexOfNew--] = string[indexOfOriginal--];}//--indexOfOriginal;} }void Test(char* testName, char string[], int length, char expected[]) {if (testName != NULL)printf("%s begins: ", testName);ReplaceBlank(string, length);if (expected == NULL && string == NULL)printf("passed.\n");else if (expected == NULL && string != NULL)printf("failed.\n");else if (strcmp(string, expected) == 0) {cout << "string=" << string << endl;cout << "expected=" << expected << endl;printf("passed.\n");}else{cout << "string=" << string << endl;cout << "expected=" << expected << endl;printf("failed.\n");} }// 空格在句子中間 void Test1() {const int length = 100;char string[length] = "hello world";Test("Test1", string, length, "hello%20world"); }// 空格在句子開頭 void Test2() {const int length = 100;char string[length] = " helloworld";Test("Test2", string, length, "%20helloworld"); }// 空格在句子末尾 void Test3() {const int length = 100;char string[length] = "helloworld ";Test("Test3", string, length, "helloworld%20"); }// 連續有兩個空格 void Test4() {const int length = 100;char string[length] = "hello world";Test("Test4", string, length, "hello%20%20world"); }// 傳入NULL void Test5() {Test("Test5", NULL, 0, NULL); }// 傳入內容為空的字符串 void Test6() {const int length = 100;char string[length] = "";Test("Test6", string, length, ""); }//傳入內容為一個空格的字符串 void Test7() {const int length = 100;char string[length] = " ";Test("Test7", string, length, "%20"); }// 傳入的字符串沒有空格 void Test8() {const int length = 100;char string[length] = "helloworld";Test("Test8", string, length, "helloworld"); }// 傳入的字符串全是空格 void Test9() {const int length = 100;char string[length] = " ";Test("Test9", string, length, "%20%20%20"); }int main() {Test1();Test2();Test3();Test4();Test5();Test6();Test7();Test8();Test9();cin.get();cin.get();return 0; }


也可以是:

#include<iostream> #include<string> using namespace std;/*length 為字符數組string的總容量*/ void ReplaceBlank(char string[], int length) {if (string == NULL && length <= 0)return;/*originalLength 為字符串string的實際長度*/int originalLength = 0;int numberOfBlank = 0;int i = 0;while (string[i] != '\0'){++originalLength;//統計字符串長度if (string[i] == ' ')++numberOfBlank;//統計字符串中的空格數量++i;}/*newLength 為把空格替換成'%20'之后的長度*/int newLength = (originalLength -numberOfBlank) + numberOfBlank * 3;// 因為這里空格也占據一個位置if (newLength > length)return;int indexOfOriginal = originalLength;//原始字符串的下標int indexOfNew = newLength;//新的字符串的下標while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){if (string[indexOfOriginal] == ' '){string[indexOfNew--] = '0';//這里是先賦值,然后-1,下同string[indexOfNew--] = '2';string[indexOfNew--] = '%';}else{string[indexOfNew--] = string[indexOfOriginal];}--indexOfOriginal;} }void Test(char* testName, char string[], int length, char expected[]) {if (testName != NULL)printf("%s begins: ", testName);ReplaceBlank(string, length);if (expected == NULL && string == NULL)printf("passed.\n");else if (expected == NULL && string != NULL)printf("failed.\n");else if (strcmp(string, expected) == 0) {cout << "string=" << string << endl;cout << "expected=" << expected << endl;printf("passed.\n");}else{cout << "string=" << string << endl;cout << "expected=" << expected << endl;printf("failed.\n");} }// 空格在句子中間 void Test1() {const int length = 100;char string[length] = "hello world";Test("Test1", string, length, "hello%20world"); }// 空格在句子開頭 void Test2() {const int length = 100;char string[length] = " helloworld";Test("Test2", string, length, "%20helloworld"); }// 空格在句子末尾 void Test3() {const int length = 100;char string[length] = "helloworld ";Test("Test3", string, length, "helloworld%20"); }// 連續有兩個空格 void Test4() {const int length = 100;char string[length] = "hello world";Test("Test4", string, length, "hello%20%20world"); }// 傳入NULL void Test5() {Test("Test5", NULL, 0, NULL); }// 傳入內容為空的字符串 void Test6() {const int length = 100;char string[length] = "";Test("Test6", string, length, ""); }//傳入內容為一個空格的字符串 void Test7() {const int length = 100;char string[length] = " ";Test("Test7", string, length, "%20"); }// 傳入的字符串沒有空格 void Test8() {const int length = 100;char string[length] = "helloworld";Test("Test8", string, length, "helloworld"); }// 傳入的字符串全是空格 void Test9() {const int length = 100;char string[length] = " ";Test("Test9", string, length, "%20%20%20"); }int main() {Test1();Test2();Test3();Test4();Test5();Test6();Test7();Test8();Test9();cin.get();cin.get();return 0; }


總結

以上是生活随笔為你收集整理的04_ReplaceBlank的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。