簡體   English   中英

如何在 char* 字符串類型中將“\n”從“”更改為“”?

[英]How can I change “\n” from to “ ” in char* string type?

char* changeEntertoSpace(char* s) {
    char* begin;
    begin = s;

    while (*begin != NULL) {
        if (*begin=="\n") {
            //*begin = " ";
            strcpy(begin," ");
        }
        begin++;
        }
    s = begin;
    return s;
}

這是我的代碼,我嘗試將文本字符串s中的<Enter>更改為<Space> 但這不起作用。

你能幫我理解我的錯誤是什么嗎?

為了替換字符串中的單個字符, strcpy()是錯誤的選擇,因為它總是 append 字符串終止符 ( '\0' ) 在復制字符串的末尾。

這可能是替換后的字符串'\n'似乎消失的原因。

您只需替換單個字符:

char * changeEnterToSpace(char* s) {
    char * begin;
    begin = s;

    while (*begin != '\0')
    {
        if (*begin=='\n')
        {
            *begin = ' '; // Substituting the single character
        }
        begin++;
    }
    // s = begin; 
    return s;
}

您在嘗試strcpy()之前評論的作業幾乎是正確的。 您使用雙引號將空格括起來,但在 C 中,單個字符用單引號括起來: char c = 'a'

請注意,為了找到要替換的字符,可以使用標准strchr() function (手冊頁)。

注意:我還評論了s = begin; 分配,這將使您的 function 返回一個空字符串。 相反,您可能希望在換行符替換后返回原始字符串。

strchr()是您需要的 function。 它在字符串中查找一個字符並返回一個指向第一次出現的指針。 您可以循環您的字符串以查找和替換所有'\n'字符。

代碼可能像:

#include <string.h>

char* changeEntertoSpace(char* s) {
    while(1) {
        char* found = strchr(s, '\n');
        if (found == NULL) {
            break;   
        } else {
            *found = ' ';    
        }        
    }
    return s;
}

// --------------------------------------
#include <stdio.h>

int main()
{
    char value[] = "hello,\nworld\n,what's up?";
    puts(value);
    changeEntertoSpace(value);
    puts(value);
}

您可以稍微優化 function:

char* changeEntertoSpace(char* s) {
    char* found = s;
    while(1) {
        found = strchr(found, '\n');
        if (found == NULL) {
            break;   
        } else {
            *found = ' ';    
        }        
    }
    return s;
}

這樣,您不會每次都搜索整個字符串,而只是搜索出現后的部分。

暫無
暫無

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

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