【问题标题】:Counting substring characters in string计算字符串中的子字符串字符
【发布时间】:2023-04-06 22:26:01
【问题描述】:

我正在编写一个函数,它接受一个由混合“o”、“g”和“c”组成的输入字符串。对于字符串中的每个字符,都会打印一个特定的符号。但是,对于 'g' 字符,id 喜欢计算字符串中一行中有多少个 g。这是我到目前为止的代码:

void printSymbol(char *str) // takes
{
  int i; // counter for entire string
  int k; // counter for substring ('g' char)
  int count = 0; //stores amount of consecutive g's in substring

  for (i = 0; str[i] != '\0'; i++) //looping until null term.
  {
    if (str[i] == 'o')
      printf("==========\n"); //symbol for o
    if (str[i] == 'c')
      printf(" ~~~~~~~~ \n"); //symbol for c
    if (str[i] == 'g') //if character is g
    {
      for(k = i; str[k] == 'g'; k++) //will loop through string starting at first g until next character is NOT g
      {
        count++; //count amount of consecutive g
      }
      printf("%d\n", count); //printing number of g's in a row
      if (count % 3 == 2) //All of these if statements are printing.
        printf("R==2\n");
      if (count % 3 == 1)
        printf("R == 1\n");
      if (count % 3 == 0)
        printf("R == 0\n");

      count = 0; // resets count for next set of consecutive g's in string
    }
  }
}

我遇到的问题是它正在为 g 字符打印 for 循环中的所有 if 语句。如果一行中有 3 个 g,它将打印 R = 0,然后 R = 2,和 R = 1,因为它将循环遍历每个 g,因此余数正在变化。我该如何阻止这个?我想记录整组连续 g 的余数。所以如果有 3 个 g,我想打印 R = 0,然后重置计数器 var。

【问题讨论】:

    标签: c string for-loop if-statement


    【解决方案1】:

    在检查连续的 g 字符时,您没有更新您的 i 变量。检查连续 g 字符的内部 for 循环使用单独的循环变量 k,但由于未更新 i 变量(主循环计数器),因此将多次检查连续 g 字符的字符串次。

    例如

    假设您的字符串是“...ggg...”。那么第一次遇到这个字符串,内部的for循环会检查g个字符的个数,发现是3,然后打印出R == 0,把count重置为0再返回主要的for 循环。

    但是,外部for 循环随后会将字符串视为“gg...”,并且它将再次进入内部for 循环。这一次,count 将是 2,R == 2 将被打印出来。

    这个过程将重复最后一次。要处理的字符串是“g...”。这一次,count 将是 1,R == 1 将被打印出来。

    要解决这个问题,您只需通过添加您找到的 g 字符数 - 1 来更新您的 i 变量(因为循环计数器会在循环结束时递增)。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2017-10-20
      • 2019-09-14
      • 1970-01-01
      相关资源
      最近更新 更多