回复 9楼 半亩荒塘
											你好,不能实现噢,比如说我输入“this is a desk“ 我的意思是,输入这个字符串,,结果显示单词数量为4,,它首先要检查前面有没有空格,然后一个一个判断,一直到‘\0’为止										
					
	
程序代码:#include <stdio.h>
#include <string.h>
void main()
{
    char temp[100];   
    char out[10][20];                       
    int  i;           
    int  m = 0;       
    int  sum = 0;     
    int  flag = 0;    
    
    printf("请输入待测字符串(输入回车表示结束):\n"); 
    gets(temp);
    for (i = 0; temp[i] != '\0'; i++) 
    { 
        if (((temp[i] >= 'a') && (temp[i] <= 'z')) || ((temp[i] >= 'A') && (temp[i] <= 'Z')))
        { 
            if (0 == flag)
            {
                flag = 1;            
                sum++;    
                m = 0;  
                out[sum-1][m++] = temp[i]; 
            }
            else
            { 
                 out[sum-1][m] = temp[i];
                 m++;  
            }
        }
        else
        { 
            if (0 == flag)
            {             
            }
            else
            { 
                flag = 0;
                if (sum != 0)
                { 
                    out[sum-1][m] = '\0';
                }
            }
        }
    }
    out[sum-1][m] = '\0';
    printf("这串字符串一共有%d个单词。\n", sum);
    printf("他们分别是:\n");
    for (i = 0; i < sum; i++)
    {
        puts(out[i]);
        putchar(10);
    }
}
    										
					
	
程序代码:// 我想写一个,输入一个字符串,求里面单词个数的函数,为什么上面
// 我写的这个程序,求出的个数和实际的单词个数不一样,
#include <stdio.h>
#include <string.h>
// 因为实现功能单一,就直接写在主函数里面了
void main()
{
    // 变量定义
    char temp[100];   // 存放待测字符串,如果输入长度大于100会出现问题,
    char out[10][20]; // 存放字符串中的单词,用于最后的输出,同样有问题~~如果是这
                      // 样定义的话就是说程序限制被测字符串含有不超过10个单词,并且
                      // 每个单词不能超过20个字母(其实是19个,最后一个是字符串结束符'\0')。
    int  i;           // 字符数组下标变量
    int  m = 0;       // 二维数组out[][]的第二个下标计数变量,第一个可以用下面的sum代替
    int  sum = 0;     // 单词个数计数变量
    int  flag = 0;    // 单词是否在计数中的判定变量,为1表示正在,为0则是不在,初始化为0
    
    printf("请输入待测字符串(输入回车表示结束):\n"); // 这里就有个问题,字符串里面如果
                                                        // 有回车换行符那么是会影响结果的。
    gets(temp);
    // 功能实现
    for (i = 0; temp[i] != '\0'; i++) 
    { // 这个循环的判定就是i++ 所以循环体里面就不出现i++了,表示执行一次循环就只判定一个
      // temp的元素,这样相对简单点,不容易出错
        if (((temp[i] >= 'a') && (temp[i] <= 'z')) || ((temp[i] >= 'A') && (temp[i] <= 'Z')))
        { // 呃,括号有点多,只是为了判定temp是个字母
            if (0 == flag)
            { // temp[i]是字母,那就是单词(暂时没有考虑wi1d类似这种把单词写错的情况。。)
              // 看看这个单词是正在计数还是还没有开始计数,flag=0表示还没有计数,这时候
              // 要准备开始计数了,并把单词写入out二维数组里面
                flag = 1;            
                sum++;    // flag只要是重新等于1了就说明有个新的单词,那么sum++总没错的
                m = 0;    // 新的单词,out里面要另起一行,从第一个开始记入单词了
                out[sum-1][m++] = temp[i]; // 不要忘了m++ 我就忘了 T_T
            }
            else
            { // 如果flag=1,说明这个temp[i]字母是某个单词的后续
                 out[sum-1][m] = temp[i];
                 m++;  // 使out二维数组记录这个单词的那一行中向后面移动一个元素,为下一个
                       // 单词做准备,这两行可以合并为out[sum-1][m++] = temp[i];
            }
        }// END OF if (((temp[i] >= 'a') && (temp[i] <= 'z')) || ((temp[i] >= 'A') && (temp[i] <= 'Z')))
        else
        { // 当temp[i]不是字母的情况
            if (0 == flag)
            { // flag=0说明还没有开始记录单词,所以,爱咋咋地(什么都不管)。
            
            }
            else
            { // 如果flag=1,说明前面是字母,这里不是了,也就是说这个单词结束了。
                flag = 0;
                if (sum != 0)
                { // 加一个判定,这里是处理上个单词的结尾问题,如果sum=0说明还没有记入单词
                  // 可以不处理(就比如开头是俩空格),也就是这个if语句不执行
                    out[sum-1][m] = '\0';
                }
            }
        }// END else OF if (((temp[i] >= 'a') && (temp[i] <= 'z')) || ((temp[i] >= 'A') && (temp[i] <= 'Z'))) &&&
         // END if (((temp[i] >= 'a') && (temp[i] <= 'z')) || ((temp[i] >= 'A') && (temp[i] <= 'Z'))) FOR ALL
    }// END OF for (i = 0; temp[i] != '\0'; i++)
    // for执行完毕,如果输入temp字符串有这种情况:.....you 直接完毕了,那么最后一个
    // out的字母就没有字符串结束符,所以加上一个(就是原来有,加上一个也没事,除非越界)
    out[sum-1][m] = '\0';
    // 这是结果的输出:
    printf("这串字符串一共有%d个单词。\n", sum);
    printf("他们分别是:\n");
    for (i = 0; i < sum; i++)
    {
        puts(out[i]);
        putchar(10);
    }
}
    										
					
	