【发布时间】:2020-08-08 22:29:22
【问题描述】:
我写了一段代码来计算一个字符串包含多少个单词。
我已经尝试了多个输入,并且大多数输入都是正确的,但有些情况表明我的程序存在基本的逻辑缺陷。例如,如果我在一个空字符串中设置,输出将错误地为 1,如果我在字符串的末尾添加空格,由于某种原因,我不知道输出将是 1+其中的实际单词数字符串和我的代码显然表明我想取出所有空格/制表符。
我的程序基本上是在一个字符串中这样做的,但不幸的是没有在它的末尾。我很清楚我的功能有问题,但我不知道是什么。而且我知道借助外部库可能更容易实现它,但我被要求用纯基本代码来实现它。
这是我目前所拥有的:
int get_number_of_words(char input_string[])
{
int i, j, counter = 0;
for (i = 0; i < STRING_SIZE; i++)
{
if (input_string[i] != ' ')
{
counter++;
j = i;
while ((input_string[j] != ' '))
j++;
i = j;
}
}
return counter;
}
我会给你一些输入和输出字符串的例子:
-
"Hello\t\t\t"- 1 个字(标签被忽略) -
"Hello"- 1 个字 -
""- 0 字 -
"\t\tThis is a basic example\t\t\t"- 5 个字(忽略标签) -
"This is a basic example "- 5 个单词(最后一个空格被忽略)
稍后,我将不得不考虑不同的标点符号(包含在单词中),但与此同时,我只想掌握程序的核心。
【问题讨论】:
-
你能包含一些输入字符串和(预期的)输出吗?问题描述很清楚,但我不确定例如当前代码中的制表符、换行符和问题。输入输出将极大地阐明这些。
-
出现在末尾或开头的空格,换行符或制表符等空格字符是有问题的。这些字符可以连续出现,也可以出现在字母数字字符之间。此外,这些字符可能取决于操作系统
-
越界访问的未定义行为。
-
如果您有两个空格,您的程序将计算两个单词,您可以尝试使用 int 作为 bool 来控制它
-
如果
input_string指向一个字符串字面量或char数组小于SIZE_STRING怎么办?然后,您的未定义行为读取超出了引用的char数组或字符串文字的范围。
标签: c string word-count