黑马程序员技术交流社区

标题: 关于下列代码执行 出得问题 [打印本页]

作者: songynnm    时间: 2015-8-15 10:51
标题: 关于下列代码执行 出得问题
//
//  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


作者: Eil.tea    时间: 2015-8-15 11:03
大哥,这么多警示,你先修改一下,重新发代码吧,首先你得明白,指针和字符怎么能比较呢?str == ' ', 第二,strlen(str)返回的是长整型 int len = strlen(str);,第三,字符串数组,怎么能赋值一个字符呢?str = first_Word(str);,你这个函数返回类型是char。
作者: songynnm    时间: 2015-8-15 11:09
本帖最后由 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. }
复制代码








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2