替代在此代码中使用gets(c)和gets(s)的替代方法是什么?

时间:2017-03-01 16:39:35

标签: c scanf gets

编辑:

问题:

编写程序以查找给定单词(即短字符串)出现在a中的次数 句子(即长串!)。从标准输入读取数据。第一行是一个单词,即 接下来是第二行的一般文字。

示例输入:

the
the cat sat on the mat

示例输出:

2

之前我尝试过使用scanf,但它无法读取整个句子,只检查第一个单词并返回1作为答案,而不是2

代码是:

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

int main()
{
char s[200000], c[20], v = ' ';
int i = 0, j, f, n = 0;
gets(c);
gets(s);

while (i < strlen(s))
{
    j = 0;
    f = 0;
    while (j < strlen(c))
    {
        if (s[i++] != c[j++])
        {
            f = 1;
            i--;
            break;
        }
    }

    if ((f == 0) && (i == strlen(s) || s[i] == ' ') && (v == ' '))
    {
        n++;
        v = s[i++];
    }
    printf("%d\n", n);
    return 0;
}
}

2 个答案:

答案 0 :(得分:0)

这是您尝试实施的程序的解决方案(answer)。这也提供了获取字符串的正确方法。

希望在任何方面都有这个帮助!

答案 1 :(得分:0)

  

替代在此代码中使用gets(c)和gets(s)的替代方法是什么?

使用以下

代替char c[20]; gets(c);
// Read a line of text
char c[20+1];  // 1 more for the \n
if (fgets(c, sizeof c, stdin) == NULL) {
  // Handle EOF or input error in some fashion
  puts("Unexpected EOF or input error");
  return 1;
}

取消'\n' Removing trailing newline character from fgets() input

// lop off a potential trailing '\n'.
c[strcspn(c, "\n")] = '\0';

其余代码可能还有其他问题。