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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张小景 中级黑马   /  2016-6-9 10:29  /  1784 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写一个将单词大写的转换程序

19 个回复

倒序浏览
/*
 使用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;
}
回复 使用道具 举报
木看懂{:2_30:}
回复 使用道具 举报
董立权 发表于 2016-6-9 11:47
/*
 使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词,首字母大写
 把非字母认定为单词之 ...

if (str>'z' || str<'A' || (str>'Z' && str<'a'))这句话什么意思
回复 使用道具 举报

题没看懂?就是说从键盘接收多个单词,把每个单词的第一个字母大写
回复 使用道具 举报
张小景 发表于 2016-6-10 21:18
if (str>'z' || str'Z' && str

判断是否是字母啊,这个程序只是把输入字符串的首字母转成了大写,你的意思是要把所有的字母都转成大写么?那样的话,不需要判断单词,只需要直接判断是否是小写字母就可以了,条件   str >= 'a' && str <= 'z' ,遍历字符串,在这个区间的单词转成大写就好了
回复 使用道具 举报
张小景 发表于 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
恩我在慢慢理解一下在上基础班

我报的深圳0705的基础班,还有一个月才开班呢,你是在哪里上基础班啊,深圳么?
回复 使用道具 举报
dayuanzhang 发表于 2016-6-10 22:13
楼主哪个校区,我也在学习

北京校区,你呢
回复 使用道具 举报
#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;
}
回复 使用道具 举报

我在深圳校区哦,一起加油吧
回复 使用道具 举报
回复 使用道具 举报
上面哥们用的C语言中的,如果在oc中可以使用uppercaseString方法可以方便输出大写字母,因此如果想输出小写的话,使用NSString方法中的lowercaseString,是一样的原理
回复 使用道具 举报
张小景 发表于 2016-6-10 22:09
恩我在慢慢理解一下在上基础班

你现在也是自学吗?最好是把 大小写分别存到一个数组中去,然后检测到小写,就把相应位置的大写赋值给他,就变成大写了,具体的自己尝试一下
回复 使用道具 举报
1871037345 发表于 2016-6-15 23:58
你现在也是自学吗?最好是把 大小写分别存到一个数组中去,然后检测到小写,就把相应位置的大写赋值给他 ...

用二维数组吗
回复 使用道具 举报
lp19940501 发表于 2016-6-14 18:47
上面哥们用的C语言中的,如果在oc中可以使用uppercaseString方法可以方便输出大写字母,因此如果想输出小写 ...

请求具体这个方法是怎么用
回复 使用道具 举报
张小景 发表于 2016-6-16 07:58
请求具体这个方法是怎么用

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


//把 str 中所有大写字母转换成小写字母
NSString *ptr = [str lowercaseString];
回复 使用道具 举报

这种方法是两个独立的数组,有兴趣就试试,OC中会更简单
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马