【问题标题】:C program to replace all occurrences of a character in a stringC程序替换字符串中所有出现的字符
【发布时间】:2019-01-20 02:59:13
【问题描述】:

我想编写一个 C 程序来搜索给定字符串中所有出现的单词,并且 用大写字母写出所有出现的单词。

例子

输入

输入字符串:早上好。祝你有美好的一天。

输出 在位置 1 发现了“好”这个词 在位置 22 发现了“好”这个词

早上好。祝你有美好的一天。

我写了以下代码

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

void main()
{
  char str[1000], pat[20] = "good";
  int i = 0, j, mal = 0, flag = 0;
  printf("Enter the string :");
  gets(str);
  while (str[i] != '\0')
  {
    if (str[i] == pat[0])
    {
      j = 1;
      //if next character of string and pat same
      while(pat[j] != '\0' && str[j + i] != '\0' && pat[j] == str[j + i])
      {
        j++;
        flag = 1;
      }
      if (pat[j] == '\0')
      {
        mal += 1;
        printf("\n The word was found at location %d.\n" , i + 1);
      }
    }
    i++;
    if (flag == 0)
    {
      if (str[j + i] == '\0')
        printf(" The word was not found ") ;
    }
  }
  printf("The word was found a total of %d times", mal);
}

如何将“好”这个词转换为大写字母?

当我使用 C 库 ctype.h 中的函数 toupper 时,整个文本都被转换为大写字母。 你能帮我吗?

谢谢

【问题讨论】:

  • 你需要存储目标词的起始位置,比如1和22。你也知道目标词的长度。因此,当您对输入字符串进行后处理时,请仅在该区域(1-4 和 22-25)内使用 toupper
  • 请正确格式化您的代码:正确缩进并删除不必要的空行。
  • DAVID,如果寻找“aba”,“xyx_ababa”应该打印为“xyx_ABAba”还是“xyx_ABABA”?
  • "我使用C库ctype.h中的toupper函数,将整个文本转换成大写字母" --> post that use.

标签: c


【解决方案1】:

如果没有输入,您的代码可能会崩溃。

使用标准函数strstr()。为什么要重新发明轮子?您还可以提高代码的复杂性。请参阅此链接:

https://www.geeksforgeeks.org/frequency-substring-string/

【讨论】:

    【解决方案2】:

    我还没有评论的权限,所以我必须在这里回答你。

    char 变量用 8 位编码,因此它可以是 256 个值 [0,255]。 可打印字符在ASCII table 中可以看到字符a 等于十进制值97

    如果您将字符视为十进制值,我相信您可以自己弄清楚如何从a (97)传递到A (65),这样您就可以对任何字符执行相同的操作。

    【讨论】:

    • toupper()怎么样?
    • @PaulOgilvie 我猜他的问题更多是关于“如何转换单个字符”。
    • toupper() 转换单个字符有什么问题?请注意,并非所有平台都使用 ascii。
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2011-02-23
    • 2019-01-10
    • 2018-07-11
    • 2014-08-05
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多