char* changeEntertoSpace(char* s) {
char* begin;
begin = s;
while (*begin != NULL) {
if (*begin=="\n") {
//*begin = " ";
strcpy(begin," ");
}
begin++;
}
s = begin;
return s;
}
这是我的代码。这是行不通的。我尝试将文本“ s”中的从更改为。 请帮我。
答案 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;
}
这样,您就不必每次都搜索整个字符串,而不必搜索整个字符串。