YuriGagarin 发布留言 2008-7-31 10:16
字符数组的起始位置有空格吗?
《C程序设计》教材里有这样一个例题:
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
下面是书中的程序:
#include
void main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for (i=0;(c=string;
int i,num=1;
char c;
gets(string);
for (i=0;(c=string;
int i,num=0;
gets(str);
for (i=0;str) && str!='-' && !isalpha(str))
num++;
}
printf("There are %d words in the line.\n",num);
}
[ 本帖最后由 StarWing83 于 2008-7-31 16:50 编辑 [/it]]vfdff 发布留言 2008-7-31 13:46
[un]StarWing83[/un] 在 2008-7-31 11:04 的发言:[/bo]
给出一个不需要word的解决方法,不过比你课本上面的例子要慢,如果需要速度,可以把函数调用改为Hash,这样速度会很快。
#include #include int main() { char str[81]; int i,num=0; gets(s ... |
这个代码怎么就是 Hash 呢 ??starwing 发布留言 2008-7-31 14:24
晕……有没有理解我说的话啊??
再给出一个Hash版本的:
#include
#include
int main()
{
char str[81];
char ap[256]={0};
int i,num=0;
for (i=0;i<26;i++)ap=ap=1;
gets(str);
for (i=0;str] && (str=='-' || !ap[(int)str]))
num++;
}
printf("There are %d words in the line.\n",num);
return 0;
}YuriGagarin 发布留言 2008-7-31 15:42
有所领悟了!
但是,那个字符串前面的空格呢??
它是怎么统计的??StarWing83 发布留言 2008-7-31 16:47
- -你的教材上的程序压根儿就没有统计空格的数目,它统计的是空格字符紧跟非空格字符的序偶的数目。这种方法可以避免单词之间有多个空格而引起的错误,但是这种方法有局限性,对于形如“-- -- --- - . ”的字符串,该程序会将符号和标点也算作字符。
我的程序也是统计序偶,不过是在统计一个字母紧跟一个非字母(同时也不是连字符)的序偶,对于“I am.a New-one.”这种字符串,教材程序给出的答案错误,而我的程序可以得到正确的答案。
[ 本帖最后由 StarWing83 于 2008-7-31 16:50 编辑 [/it]]
页: [1]