簡體   English   中英

從C中刪除字符串中的字符

[英]Remove characters from a string in C

我只能訪問'C'並需要替換字符數組中的字符。 對於這個相對簡單的程序,我還沒有想出任何干凈的解決方案。

我傳遞了一個字符數組,例如:

char strBuffer[] = "/html/scorm12/course/course_index.jsp?user_id=100000232&course_id=100000879&course_prefix=ACQ&version=2&scorm_version=3&roster_id=100011365&course_name=Test%20Course%201.2&mode=browse&course_number=0000&mode_id=1";

我需要修改此緩沖區以替換所有& & 生成的緩沖區不必覆蓋strBuffer(可以創建新的緩沖區)。

有什么建議么?

編輯:

在過去,我已經在循環中完成了strstr函數,但是正在尋找一個更簡單的解決方案,也許是C等效於String.Replace方法。

編輯:

對於我的迫切需求,以下是我所需要的一切。

char strBuffer[] = "/html/scorm12/course/course_index.jsp?user_id=100000232&course_id=100000879&course_prefix=ACQ&version=2&scorm_version=3&roster_id=100011365&course_name=Test%20Course%201.2&mode=browse&course_number=0000&mode_id=1";
char strTemp[1024];
char *s = (char*)strBuffer;
int i=0;

while (*s)
{
    strTemp[i++] = *s;
    if (strncmp(s,"&",5) == 0)
    {
        s += 5;
    }
    else
        s++;
}
strTemp[i] = 0;

未來的修改:

  • 創建一個實用程序函數來存儲此函數。
  • 將搜索字符串作為參數傳遞。
  • 確定搜索字符串的長度,因此可以刪除硬編碼的5。
  • 動態分配strTemp變量。
  • 檢查未找到空字符串和字符時出錯。

編輯:

我創建了一篇博文,詳細介紹了這些步驟並提供了更靈活的解決方案:

http://www.solutionmaniacs.com/blog/2012/11/25/c-removereplace-characters-in-a-string.html

C沒有注意到它的易用性,特別是在字符串方面,但它有一些相當不錯的標准庫函數可以完成工作。 如果你需要在字符串上進行廣泛的工作,你可能需要了解指針和指針算法,但是這里有一些庫函數無疑會對你有所幫助:

  • strchr()在字符串中查找字符(比如'&' )。
  • strcmp()strncmp()來比較兩個字符串。
  • strstr()在字符串中查找子字符串(可能比使用strchr() / strcmp()組合更容易和更快)。
  • malloc()分配一個新字符串。

基本上,你需要:

  • 使用strstr()函數查找“&”
  • 將字符復制到生成的緩沖區,直到找到的位置
  • 跳過4個字符
  • 重復,直到NUL

在堆棧或堆上分配另一個緩沖區,然后一次將字符串復制到新的緩沖區1個字符中。 遇到&字符時進行特殊處理。

char *s = (char*)strBuffer;
char sClean[strlen(strBuffer) + 1]; /* +1 for null-byte */
/* if above does not work in your compiler, use:
    char *sClean = (char*)malloc(sizeof(strBuffer) + 1);
*/
int i=0;
while (*s)
{
    sClean[i++]= *s;
    if ((*s == '&') && (!strncmp(s, "&", 5)) s += 5;
    else s++;
}
sClean[i] = 0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM