当前位置:网站首页>One question per day - replace spaces

One question per day - replace spaces

2022-07-05 08:28:00 Protect Xiaozhou

Hello, everyone , I'm protecting Xiao Zhou ღ, This issue brings you an exercise on Niuke online —— Replace blank space , Bloggers share two ways to solve problems ( A link to this question is attached at the end ), Let's have a look ~

 

  The topic comes from niuke.com

describe

Please implement a function , Put a string s Replace each space in with “%20”.

for example , When the string is We Are Happy. The replaced string is We%20Are%20Happy.

Data range :0 <=strlen(s) <=1000. Ensure that the characters in the string are capitalized English letters 、 One of lowercase letters and spaces .

Example 1

Input :

"We Are Happy"

Return value :

"We%20Are%20Happy"

Example 2

Input :

" "

Return value :

"%20"

Thinking analysis :

Title main information :

  1. Put a string s Replace each space in with “%20”; 
  2. Ensure that the characters in the string are capitalized English letters 、 One of lowercase letters and spaces ;

Defines an array of characters ch[N], Or define a dynamically opened character array , We can take traversal strings s To determine the position of the space , Put the character before the space s The value of one to one is given to the character array we define ch, When spaces are encountered , take ch The values of spaces and the next two spaces are replaced by '%','2','0'. until character string s End flag encountered ‘\0’ until .

Program realization :

Array approach :

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

char* replaceSpace(char* s) 
{
    // Because the array is opened on the stack area , Function end stack frame destroy , So want to use static Modify the array , Avoid function end , Array destroy 
    static char ch[50] = { 0 };
    for (int i = 0,j = 0; s[i] != '\0'; i++, j++)
    {
        if (s[i] != ' ')
        {
            ch[j] = s[i];
        }
        else if (s[i] == ' ')
        {
            ch[j] = '%';
            ch[j + 1] = '2';
            ch[j + 2] = '0';
            j += 2;//j Follow i Keep in sync 
        }
    }
    s = ch;
    // Return the pointer type according to the requirements of the topic  
    return s;
}

int main()
{
	char arr[50] = {0};
	gets(arr);
	// Replace blank space 
	char *str=replaceSpace(arr);
    printf("%s\n",str);
	return 0;
}

Dynamic development practices : 

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

char* replaceSpace(char* s)
{
    // write code here

    int N = strlen(s);// Calculate string length 
    char tmp[] = { '%', '2', '0' };// replace content 
    int  space = 0;// Calculate the number of spaces 
    for(int i=0;i<N;++i)
    {
        if (s[i]==' ')
        {
            ++space;
        }
    }
    int Len = N + space * 2;
    // The function of dynamically opening up space on the heap ends , Will not actively destroy 
    char* str =(char*)malloc(Len*sizeof(char));
    if (str == NULL)// If dynamic development fails , End procedure 
        return;
    // Traversal string s
    int i = 0;
    while (*s)
    {
        if (*s == ' ')
        {
            int n = 0;
            while (n < 3)
            {
                str[i] = tmp[n];
                ++i;
                ++n;
            }
        }
        else
        {
            str[i] = *s;
            ++i;
        }
        ++s;
    }
    return str;
}

int main()
{
	char arr[50] = {0};
	gets(arr);
	// Replace blank space 
	char *str=replaceSpace(arr);
    printf("%s\n",str);
	return 0;
}

  Three spaces

  Pay attention to :

  1. The return type of this question is char*
  2. If you define character array storage , The array is opened on the stack area of memory , Function end stack frame destroy , That is, the space opened up is recycled by the operating system , here , We take this array address as the return value , It will cause illegal access to memory , So we should use static Decorate the array , Let the array become a static global variable , It will not be destroyed because the function ends .
  3. Can be used to malloc() Open up a space on the heap of memory for storage , In addition to our initiative in the space on the heap free() Release and program end are recycled by the operating system , It will not be destroyed for other reasons .

If you don't know anything about dynamic memory, you can learn another blog of the blogger :C Language —— Dynamic memory

http://t.csdn.cn/78xTK

Interested friends can click on the link to try to use the blogger's method , Or do it in your own way .

The title comes from : Cattle from

link : Replace blank space _ Niuke Tiba _ Cattle from

Thank you for watching this article , Please look forward to : Protect Xiao Zhou ღ  

  If there is infringement, please contact to modify and delete !

原网站

版权声明
本文为[Protect Xiaozhou]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050823150448.html