黑马程序员技术交流社区

标题: 写一个将单词大写的转换程序 [打印本页]

作者: 张小景    时间: 2016-6-9 10:29
标题: 写一个将单词大写的转换程序
写一个将单词大写的转换程序
作者: 董立权    时间: 2016-6-9 11:47
/*
 使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词,首字母大写
 把非字母认定为单词之间的分隔符
*/
#include <stdio.h>
int main(){
    //定义字符数组用来存储输入的字符串
    char str[100];
    //定义变量,用来记录是否是单词,1表示是单词,0 表示不是单词
    int word = 1;
    //记录单词个数
    int count = 0;
    printf("请输入一个字符串\n");
    gets(str);
    //遍历字符串
    for (int i = 0; str[i] != '\0'; i++) {
        //判断是否是字母,不是字母将单词标记置为1
        if (str[i]>'z' || str[i]<'A' || (str[i]>'Z' && str[i]<'a')) {
            word = 1;
        //是字母,并且单词标记为1,即认为是一个新的单词:单词数+1,首字母小写的改成大写,单词标记置为假(连续字母是同一单词)
        }else if(word == 1){
            count++;
            if(str[i]>='a' && str[i]<='z'){
                str[i] -= 32;
            }
            word = 0;
            
        }
    }
    printf("字符串是%s\n单词个数%d\n",str,count);
    return 0;
}

作者: dongkuan    时间: 2016-6-9 19:24
木看懂{:2_30:}
作者: 张小景    时间: 2016-6-10 21:18
董立权 发表于 2016-6-9 11:47
/*
 使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词,首字母大写
 把非字母认定为单词之 ...

if (str>'z' || str<'A' || (str>'Z' && str<'a'))这句话什么意思
作者: 张小景    时间: 2016-6-10 21:21

题没看懂?就是说从键盘接收多个单词,把每个单词的第一个字母大写
作者: 董立权    时间: 2016-6-10 21:43
张小景 发表于 2016-6-10 21:18
if (str>'z' || str'Z' && str

判断是否是字母啊,这个程序只是把输入字符串的首字母转成了大写,你的意思是要把所有的字母都转成大写么?那样的话,不需要判断单词,只需要直接判断是否是小写字母就可以了,条件   str >= 'a' && str <= 'z' ,遍历字符串,在这个区间的单词转成大写就好了
作者: 董立权    时间: 2016-6-10 22:03
张小景 发表于 2016-6-10 21:18
if (str>'z' || str'Z' && str

str<'A'               str>'Z'&&str<'a'                   str>'z'
...........A.......Z................................a...........z.........
作者: 张小景    时间: 2016-6-10 22:09
恩我在慢慢理解一下在上基础班
作者: dayuanzhang    时间: 2016-6-10 22:13
楼主哪个校区,我也在学习
作者: 董立权    时间: 2016-6-10 22:14
张小景 发表于 2016-6-10 22:09
恩我在慢慢理解一下在上基础班

我报的深圳0705的基础班,还有一个月才开班呢,你是在哪里上基础班啊,深圳么?
作者: 张小景    时间: 2016-6-11 21:20
dayuanzhang 发表于 2016-6-10 22:13
楼主哪个校区,我也在学习

北京校区,你呢
作者: 猜不透    时间: 2016-6-11 22:10
#include <stdio.h>
#include<string.h>
int main(){
    char arr[100];
    printf("请输入一段长度少于100的英文语句,且每个单词用下划线隔开,语句首字母大写\n");
   
    // gets接收,可以忽略空格
    gets(arr);
   
    // 循环遍历输入的字符串
    for (int i=0; i<strlen(arr); i++) {
        // 判断角标是0的时候(也就是第一个字符),转换为大写
        if (i == 0) {
            arr[i] = arr[i]-32;
        }
        // 判断遇到空的时候,取后一个字符转换成大写
        if (arr[i]==' ') {
            arr[i+1]=arr[i+1]-32;
        }
    }
   
    // 打印转换后的结果
    for (int j=0; j<strlen(arr); j++) {
        printf("%c",arr[j]);
    }
    printf("\n");
    return 0;
}

作者: dayuanzhang    时间: 2016-6-11 22:42

我在深圳校区哦,一起加油吧
作者: wangxiaoxuxu    时间: 2016-6-12 21:17

作者: lp19940501    时间: 2016-6-14 18:47
上面哥们用的C语言中的,如果在oc中可以使用uppercaseString方法可以方便输出大写字母,因此如果想输出小写的话,使用NSString方法中的lowercaseString,是一样的原理
作者: 1871037345    时间: 2016-6-15 23:58
张小景 发表于 2016-6-10 22:09
恩我在慢慢理解一下在上基础班

你现在也是自学吗?最好是把 大小写分别存到一个数组中去,然后检测到小写,就把相应位置的大写赋值给他,就变成大写了,具体的自己尝试一下
作者: 张小景    时间: 2016-6-16 07:57
1871037345 发表于 2016-6-15 23:58
你现在也是自学吗?最好是把 大小写分别存到一个数组中去,然后检测到小写,就把相应位置的大写赋值给他 ...

用二维数组吗
作者: 张小景    时间: 2016-6-16 07:58
lp19940501 发表于 2016-6-14 18:47
上面哥们用的C语言中的,如果在oc中可以使用uppercaseString方法可以方便输出大写字母,因此如果想输出小写 ...

请求具体这个方法是怎么用
作者: 1871037345    时间: 2016-6-17 11:26
张小景 发表于 2016-6-16 07:58
请求具体这个方法是怎么用

说得非常有道理呵呵
他们两个对象方法,返回值都是 NSString 类型的对象,所以需要一个 NSString 类型的对象来接收
  
NSString *str = @"asDfasFD";
//把 str 中所有小写字母转换成大写子字母
NSString *ptr = [str uppercaseString];


//把 str 中所有大写字母转换成小写字母
NSString *ptr = [str lowercaseString];

作者: 1871037345    时间: 2016-6-17 11:27

这种方法是两个独立的数组,有兴趣就试试,OC中会更简单




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