如何将char *字符串类型中的“ \ n”从“ \”更改为“”?

时间:2019-11-14 09:08:58

标签: c

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

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

这是我的代码。这是行不通的。我尝试将文本“ s”中的从更改为。 请帮我。

2 个答案:

答案 0 :(得分:3)

为了替换字符串中的单个字符,strcpy()是错误的选择,因为它将始终在复制的字符串的末尾附加字符串终止符('\ 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'

注意:我还评论了s = begin;分配,这将使您的函数返回一个空字符串。相反,您可能希望替换换行符后的原始字符串。

答案 1 :(得分:2)

strchr()是您需要的功能。它在字符串中查找字符,并返回指向第一个匹配项的指针。您可以在字符串上循环查找并替换所有'\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);
}

您可以对功能进行一些优化:

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

这样,您就不必每次都搜索整个字符串,而不必搜索整个字符串。