A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© songynnm 中级黑马   /  2015-8-15 10:51  /  654 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//
//  main.c
//  每个单词首字母大写并统计单词个数

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

/*!
小写字母变大写字母
* @param small 数组传过来的单词开头小写字母
*
* @return 大写字母
*/
char first_Word(char small){
    char big;
    int temp = 0;
    big = small - 32;
    return big;
}

/*!
计算有多少个单词,
以空格隔开的算一个单词
* @param len 数组长度
* @param str 数组名
*/
void count_Words(int len,char str[len]){
    int num = 1;
    for (int i = 0; i < len; i++) {
        if (str == ' ') {
            num++;
            str[i+1] = first_Word(str[i+1]);
        }
        if (i == 0) {
            str = first_Word(str);
        }
    }
    printf("一共有%d个单词\n",num);
    puts(str);
}

int main(int argc, const char * argv[]) {
    char str[100];
    gets(str);
    str[0] = first_Word(str[0]);
    int len = strlen(str);
    count_Words(len, str);
    return 0;
}
如果输入下面这四个会出现最后一行的结果,为什么?
sdf dsf dz z
一共有5个单词
3df Dsf Dz Z \340

2 个回复

倒序浏览
大哥,这么多警示,你先修改一下,重新发代码吧,首先你得明白,指针和字符怎么能比较呢?str == ' ', 第二,strlen(str)返回的是长整型 int len = strlen(str);,第三,字符串数组,怎么能赋值一个字符呢?str = first_Word(str);,你这个函数返回类型是char。
回复 使用道具 举报
本帖最后由 songynnm 于 2015-8-15 11:10 编辑
Eil.tea 发表于 2015-8-15 11:03
大哥,这么多警示,你先修改一下,重新发代码吧,首先你得明白,指针和字符怎么能比较呢?str == ' ', 第二 ...

已解决,谢大神,首先,我哪有用到指针啊,明明是数组中的第i个元素和' '比较啊,。。。哦,sorry,我没将代码格式化,东西都不见了
  1. void count_Words(long len,char str[len]){
  2.     int num = 1;
  3.     for (int i = 0; i < len; i++) {
  4.         if (str[i] == ' ') {
  5.             num++;
  6.             str[i+1] = first_Word(str[i+1]);
  7.         }
  8.         if (i == 0) {
  9.             str[i] = first_Word(str[i]);
  10.         }
  11.     }
  12.     printf("一共有%d个单词\n",num);
  13.     puts(str);
  14. }

  15. int main(int argc, const char * argv[]) {
  16.     char str[100];
  17.     gets(str);
  18.     long len = strlen(str);
  19.     count_Words(len, str);
  20.     return 0;
  21. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马