[英]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.