给定一个字符串,翻转字符串中的每个单词,附c语言实现

把一个字符串按照单词反转过来,比如 "the sky is in blue",反转成"blue in is sky the" 


用OC的就比较简单了,

1.先用空格切割这个字符串,

2.然后反转数组,

3.最后在把数组用空格join起来就可以了.

- (void)viewDidLoad {
    [super viewDidLoad];

    // oc实现
    NSString * str = @"the sky is blue";
    NSArray * array = [str componentsSeparatedByString:@" "];
    NSString * result = @"";
    NSArray * resultArray = [[array reverseObjectEnumerator] allObjects];
    
    result = [resultArray componentsJoinedByString:@" "];
    NSLog(@"%@",result);
}

c语言的实现才是重点,

1.移动到最后找出字符串的最后一个字符

2.left向前寻找单词的边界,如果为' ',说明是单词的分隔了

3.找到后left和right之间的就是一个完整的单词,加入到result中

4.继续2,3步,直到left==0, 这时result中的就是结果了,注意处理' '的情况

    // c语言实现
    char * str = "the sky is in blue";
    // 存放结果字符串
    char result[100] ={};
    // 这个单词的左边
    int left = 0;
    // 单词的右边
    int right = 0;
    // result数组的下表
    int resultI = 0;
    // 先找到原始字符串的最后一个char的下表
    for (int i = 0; str[i]!='\0'; i++) {
        left = right = i;
    }
    
    
    while (left >= 0) {
        // left开始左移,寻找单词的最左边
        while (str[left]!=' ' && left>0) {
            left--;
        }
        
        // 把这个单词放入到result中,空格单独处理下
        for (int i = left; i<=right; i++) {
            if (str[i] == ' ' ) {
                continue;
            }
            result[resultI] = str[i];
            resultI ++;
        }
        // 手动在后面追加空格
        result[resultI] = ' ';
        resultI++;
        
        // 找下一个单词
        right = left;
        left --;
        
    }
    // 去掉最后一个空格
    result[resultI-1] = '\0';

    NSLog(@"%s",result);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章