【问题标题】:replacing a substring error替换子字符串错误
【发布时间】:2012-12-04 09:35:40
【问题描述】:

我在 c 中有一个子字符串问题。它没有正确更改子字符串。它必须找到 foo 并用其他东西替换它,但它不能更改它。它只是更改了 'o' 部分。请帮忙。

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

char *replace(char *s, char old, char newer)
{
char *p = &s[0];

while(*p)
{
if(*p == old)
*p = newer;

p++;
}

return s;
}

int main()
{
char mystr[250];
printf("enter ");
gets(mystr);
puts(replace(mystr, 'foo', 'bars'));
return 0;
}

【问题讨论】:

  • 你的函数只能替换单个字符。
  • This 是你想要的我的朋友,你想要替换字符串,而不是单个字符。
  • @axiom 谢谢你的朋友,我会寻找它。但我不明白为什么它只改变一个字符??
  • 尝试在replace() 中添加printf("\n%c %c\n",old,newer);。当您传递多字符时,实际传递的分别是os(传递的值可能因实现而异)。因此问题。也不要使用gets()。我敢打赌编译器也会警告你gets()。尝试改用fgets()
  • 我试图放置 fgets 但它给了我错误我认为这没什么大不了的。但我看到了你所看到的。问题是它只是改变了一个字符并且无法解决这个问题。该死的:D

标签: c substring


【解决方案1】:
char *replace(char *s, char *old, char *newer)
{
...

if(*p == *old){
    *p = *newer;
    old++; newer++;
}
...

puts(replace(mystr, "foo", "bars"));

这些更改应该可以解决问题。

【讨论】:

  • 它只改变了 3 个单词我如何添加第四个字母??
【解决方案2】:

首先,您的函数采用单个字符“旧”和“新”,但您想替换子字符串..

【讨论】:

  • 对于初学者,将签名更改为 char *replace(char *s, char *old, char *newer) 并执行 strcmp。或者在您的主​​帖中查看来自@axiom 的链接。
【解决方案3】:

'foo' 和 'bars' 不是字符

【讨论】:

  • 当我将它们初始化为一个字符时,它也会做同样的事情。
  • 尝试:puts(replace("help",'p','l'));
  • 但我想从用户那里更改一个字符串
猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2017-04-24
相关资源
最近更新 更多