c::用字串代替空格f
1、題目要求:
請實現一個函式,把字元陣列中的每個空格替換成“%20”。
2、分析:
1)想法一:我們可以再建立一個數組,當遇到空格的時候,就將所要替換的字串一個一個放進去,這種方法當然可行,但是效率低又造成空間的浪費,所以我們不採取這種方法。
2)想法二:從前往後:在原基礎上進行替換(空間是足夠的),如果從前往後遇到空格就進行替換,必然後對原來的字元造成覆蓋,不可以實現
3)想法三:從後往前:倒著遇到空格就玩夠移動同時用字串進行替換,如果全部都是空格的話,那勢必造成時間複雜度O(n^2)的開銷,可以實現的,但是做法不是很佳
4)想法四:因為我們要進行的是將字串“%20”替換空格,所以我們可以利用如下的方式
*先統計出源字串中空格的個數
*然後根據要替換的字串中字元的個數和統計出的空格的個數的關係:
源字串中空格的個數*2+2=替換後字串中空格的個數
*我們將源字串的末尾記錄下來,將替換後字串的末尾記錄下來,當源字串的末尾不為空格的時候,就將源字串對應的字元賦給替換後的字串末尾指向的對應位置,否則就進行新增‘0’,‘2’,‘%’,這三個字元,然後源字串末尾指標繼續向前移動,最終結束的時候就是這兩個指標相遇的時候。
說了這麼一大段,大家估計雲裡霧裡,我用圖來進行說明下:(我這裡給的源字串是“we are happy.”)
兩個指標一直在往左走最終相遇,替換完成
*程式碼實現:
/*函式說明: 請實現一個函式,把字元陣列中的每個空格替換成“%20”。 例如輸入“we are happy.”,則輸出“we%20are%20happy.”。 */ #include<stdio.h> void Replace(char *a) { char *str = a; int *end = NULL; int *new_end = NULL; int count = 0; while(*str != '\0') { if(*str == ' ') { count++; } str++; } end = str-1; new_end = count*2+end; while(end != new_end) { if(*end != ' ') { *new_end-- = *end--; } else { *new_end-- = '0'; *new_end-- = '2'; *new_end-- = '%'; end--; } } } int main() { char *a = "we are happy"; printf("%s\n",a); Replace(a); printf("%s\n",a); //printf("%d\n",Blank_count(a)); return 0; }
相關推薦
c::用字串代替空格f
1、題目要求: 請實現一個函式,把字元陣列中的每個空格替換成“%20”。 2、分析: 1)想法一:我們可以再建立一個數組,當遇到空格的時候,就將所要替換的字串一個一個放進去,這種方法當然可行,但是效率
1.輸入字串,用%20代替空格並返回字串
2018-11-13 問題描述: 輸入字串,用%20代替空格並返回字串 思路: 1.使用字串的replaceAll()方法,達到物盡其用的目的; 2.自己編寫方法,實現該功能 思路1的程式碼: 1 package zhangchaolun.test; 2 i
c語言-字串去空格
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <strin
C#---將字串按空格分隔
string[] line = System.Text.RegularExpressions.Regex.Replace(strline.Trim(), @"[\s]+", " ").Split(" "
C++用字串組成心形圖案的嘗試
在網上看到好多有奇特圖案的函式,比如這個公式,能繪出這樣的心形圖案。 為了用字元把心形區域填滿,只需要設定for迴圈用x和y表示出一個方形畫布區域,如果左邊表示式的值不大於右邊表示式1,則說明座標位於心形區域內,以字元填充之,否則用空格填充區域外的部分。 除此之外,要將字
BMP轉成C語言陣列檔案工具(用image2lcd代替bmp2h exe)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
c# 用正則表示式獲取開始和結束字串中間的值
/// <summary> /// 獲得字串中開始和結束字串中間得值 /// </summary> /// <param name="str">字串</param> /// <param name="s">開始</param>
【C++】C++行內函數也可以用來代替巨集
巨集是可以帶引數的,它在形式上和函式非常相似。不過不像函式,巨集僅僅是字串替換,不是按值傳遞,所以在編寫巨集時要特別注意,一不小心可能就會踩坑。 #define SQ(y) y*y 當n = 9 時,SQ(n) = 81 如果把SQ(n)換成SQ(n+1)卻得不到1
C++(二十四) — 指向字元的指標為什麼可以用字串來初始化,而不是字元地址?
一、C語言中,為什麼字串可以賦值給字元指標變數? char *p; a='5'; p=&a; //顯然是正確的, p="abcd"; //但為什麼也可以這樣賦值?? 問:一直理解不了為什麼可以將字串常量賦
C 實現字串按多個字符采用Split方法分割
using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);foreach (string i in sArray)
JQ實現將字串的銘文轉換成密文存放,並顯示密文,密文形成方法是:輸入的字母用後4個字母替換,如字母A用其後第4個字元E代替,字母a用e代替。
檔案結構 程式碼部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-
C/C++中輸入帶空格的字串用法總結
(1)gets(char *str) 需要包含標頭檔案#include <stdio.h> (2)scanf("%[^\n]]",str) 需要包含標頭檔案#include <stdio.h>
C語言輸入帶空格的字串
用scanf("%s",array); 的話遇到空格就停止接收後面的字元了,那怎麼才能接收帶空格的字串呢? 1.用 gets() ,它可以接收帶空格的字串, 直到回車才結束輸入 char buf[80]={0}; gets(buf); //可以讀取空格, 回車結
C++去除字串中多餘的空格
今天寫了個小程式設計,去除字串中多餘的空格,例如"I___am_____a______student."(下劃線表示空格哈,打多個空格顯示的還是一個),最後輸出”I am a student.” 現在把自己的思路貼上,歡迎大家留言指正。 思路就是定義兩個指標
C++如何輸入含空格的字串
1、scanf函式(包含標頭檔案#include <stdio.h>) scanf函式一般格式為scanf(“%s”,st),但scanf預設回車和空格是輸入不同組之間的間隔和結束符號,所以輸入帶空格,tab或者回車的字串是不可以的。解決方法如下: 1)利用格
【c語言】字串替換空格:請實現一個函式,把字串中的每個空格替換成“%20”
// 字串替換空格:請實現一個函式,把字串中的每個空格替換成“%20”。 // 例如輸入“we are happy.”,則輸出“we%20are%20happy.” #include <stdio.h> #include <assert.h>
C語言:使用命令列引數用字串讀取流和輸出流進行文字檔案的複製
#include<stdio.h> int main(int argc,char *argv[]) { //檢查使用者的引數是否正確 if(argc<3) { printf("用法:命令 原始檔名 目標檔名\n"); return -1;
c# 字串拆分 ;c# 中字串中的分號用逗號替換;SQL Server 字串中的分號用逗號替換
1、string[] ids = extData.Split(new char[] { ';' });2、extData.Replace(";", "','"); string.Format(strSQL, extData.Replace(";", "','"))3、1 se
C++11新特性,實現用字串作為switch的case子句
有時候,我們想寫出下面這樣的switch語句: const char* str = "first"; switch(str){ case "first": cout << "1st one" << endl;
C++連續輸入帶空格的字串
測試檔案 測試1 #include <stdio.h> #include <iostream> #include <string> using namespa