| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1084 人关注过本帖
标题:菜鸟学C,程序中遇到问题,求大神指导
只看楼主 加入收藏
SimonYLC
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-4-3
收藏
得分:0 
回复 9楼 半亩荒塘
你好,不能实现噢,比如说我输入“this is a desk“ 我的意思是,输入这个字符串,,结果显示单词数量为4,,它首先要检查前面有没有空格,然后一个一个判断,一直到‘\0’为止
2014-04-03 17:11
SimonYLC
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-4-3
收藏
得分:0 
你好,不能实现噢,比如说我输入“this is a desk“ 我的意思是,输入这个字符串,,结果显示单词数量为4,,它首先要检查前面有没有空格,然后一个一个判断,一直到‘\0’为止
2014-04-03 17:12
SimonYLC
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2014-4-3
收藏
得分:0 
回复 8楼 SimonYLC
亲,那你写个简单点的,给我指导一下啊
2014-04-03 17:14
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
只考虑空格为单词的分隔符。
#include <stdio.h>
int  main()
{
    char s[100];   
    int i,n=0;
     gets(s);  

    if(s[0]!=' ')n=1;
    for(i=1;s[i];i++)
        if( s[i-1]==' '&& s[i]!=' ')n++;
    printf("n=%d\n",n);
     return 0;
 }
收到的鲜花
  • 我是殊帕面2014-04-05 09:23 送鲜花  1朵   附言:我很赞同,太厉害了
2014-04-03 17:39
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
写了一个0.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);
    }
}

    

未知令人期待!
2014-04-03 20:43
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:1 
这是有注释的,,, 不过看着很长,其实和上面的一样。。
程序代码:
// 我想写一个,输入一个字符串,求里面单词个数的函数,为什么上面
// 我写的这个程序,求出的个数和实际的单词个数不一样,


#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);
    }
}

    

未知令人期待!
2014-04-03 20:44
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:0 
程序代码:
#include"stdio.h"
void main()
{
    char str[100],c;
    int i=0,j=0;
    gets(str);
    c=str[i];
    for(i=0;(c=str[i])!='\0';i++)
    {
       if(c == 32)
       ++j;
    }
    printf("%d\n",j);
}
这是个简易的,输入的时候每个单词之间用一个空格键分开,,就可以得到你要的结果。。


[ 本帖最后由 Andrew_Lee 于 2014-4-3 21:04 编辑 ]
2014-04-03 21:02
Dz510
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2014-3-30
收藏
得分:0 
#include"stdio.h"
void main()
{
    char str[100];
    int i=0,j=0;
    gets(str);
   
    for(i=0;str[i]!='\0';i++)
    {
       if(str[i+1]==' '||str[i+1]=='\0')
            j++;
        
    }
    printf("%d\n",j);

}试试这个
2014-04-03 22:56
Leo2014
Rank: 2
等 级:论坛游民
帖 子:4
专家分:21
注 册:2014-3-4
收藏
得分:0 
程序代码:
#include<stdio.h>
main()
{
    char str[100],c;
    int word=0,num=0,i=0; 
    gets(str);
    for(i=0;(c=str[i])!='\0';i++)
    {
        if(c==' ')word=0;
        else if(word==0)
        {
            word=1;
            num++;
        } 
    }
    printf("%d\n",num);
} 
这个可以运行 楼主的代码。。逻辑很凌乱
2014-04-04 22:11
chqwhlily
Rank: 2
等 级:论坛游民
帖 子:9
专家分:16
注 册:2011-5-11
收藏
得分:0 
回复 10楼 半亩荒塘
2014-04-04 23:27
快速回复:菜鸟学C,程序中遇到问题,求大神指导
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016336 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved