簡體   English   中英

如何在c中用'%30'替換字符串中的空格

[英]How to replace spaces in a String with '%30' in c

如何用'%30'替換字符串中的空格?

我的代碼是

int encode_string(char *st)
{
    char *str = st;
    while(*str!='\0')
    {
        if(*str==' ')
        {
            *str="%30";
        }
        str++;
    }
    printf("\n%s",st);
    return 0;
}

它不能用'%30'代替空格,因為它有超過1個字符。

我可以用字符串替換單個文字,但不能用多個字符替換。

這個怎么做?

請幫忙

任何幫助都會得到幫助

謝謝

c標准中沒有內置函數來替換字符串。 您可以如下使用自定義功能。

 int encode_string(char *str)
{
    size_t numOfSpace = 0;
    for (size_t i=0;str[i]!='\0';i++)
    {
      if(str[i] == ' ')
      numOfSpace++;
    }
    char *output = malloc(i+numOfSpace*2+1);
    if(output == NULL) return -1;
    size_t k = 0;
    while(*str !='\0')
    {
        if(*str == ' ')
        {
            output[k++] = '%';
            output[k++] = '3'
            output[k++] = '0';
        }
        else
        {
          output[k++] = *str;
        }
        str++;
    }
    output[k] = '\0';
    printf("\n%s\n",output);
    return 0;
}

以下是工作。 由於插入"%30"增加字符串長度,因此必須分配新的字符串。

char *encode_string(char *st)
{
    char *newstr, *tmpstr, *str = st;
    int nspaces= 0, len= 0;
    while(*str!='\0')
    {
        if(*str==' ') nspaces++;
        len++; str++;
    }
    if ((newstr= tmpstr= malloc(len+2*nspaces+1))==0) return 0;
    str= st;
    while(*str!='\0')
    {
        if(*str==' ')
        {
            *tmpstr++= '%';
            *tmpstr++= '3';
            *tmpstr++= '0';
        }
        else *tmpstr++= *str;
        str++;
    }
    *tmpstr = '\0';
    printf("\n%s",newstr);
    return newstr;
}

更加通用。 如果將NULL作為目標緩沖區傳遞,它將為您分配內存。 用任何字符串替換任何字符。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

inline size_t countchars(const char *str, const char ch)
{
    size_t count = 0;

    while(*str)
    {
        count += *str++ == ch;
    }
    return count;
}

char *replacecs(const char *src, char *dest, char ch, const char *repl)
{
    char *savedptr;
    size_t len = strlen(repl);

    if(dest == NULL)
    {
        dest = malloc(strlen(src) + countchars(src, ch) * (len - 1) + 1);
    }

    savedptr = dest;

    if(dest)
    {
        while(*src)
        {
            if(*src == ch)
            {
                strcpy(dest, repl);
                dest += len;
                src++;
            }
            else
            {
                *dest++ = *src++;
            }
        }
        *dest = 0;
    }
    return savedptr;
}

int main()
{
    char dest[100];
    char *d;

    printf("%s\n", replacecs("Hello  World   Some  Tests ", dest, ' ', "%30"));
    printf("%s\n", (d = replacecs(" Dynamic allocation Hello  World   Some  Tests ", NULL, ' ', "%30")));
    free(d);
    return 0;
}

如果唯一希望的結果是輸出新字符串(如問題所示),而不是在內存中創建新字符串以進行進一步的工作,則滿足以下條件。

int encode_string(char *st)
{
    putchar('\n');
    while (*st)
    {
        if (*st == ' ')
        {
            putchar('%');
            putchar('2'); // See note below.
            putchar('0');
            // ((One may also use one fwrite instead of three putchar.)
        }
        else
            putchar(*st);
        st++;
    }
    return ferror(stdout);
}

盡管該問題要求替換“%30”,但我懷疑這是一個錯誤,因為空格的ASCII碼的十六進制為“ 20”,而用“%20”替換空格是編碼URL的常見替換,而“%30”不是。

請注意,通常最好用\\n終止輸出行,而不是使其懸空,但是此代碼重現了問題中建議的行為,該問題在行之前寫\\n

暫無
暫無

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

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