思路

我本来想到的解法是倒置数组,然后遍历,每遍历一个字符,计数器加1,直到遇到空格,循环退出。

实际上我的Java代码就是这么写的:

import java.util.Scanner;

public class Main {

    public int convert(String str) {
        char[] chars = str.toCharArray();
        int length = 0;
        for (int i = chars.length - 1; i >= 0; i--) {
            if (chars[i] == ' ') {
                break;
            }
            length++;
        }
        return length;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Main main = new Main();
        while (in.hasNext()) {
            String str = in.nextLine();
            System.out.println(main.convert(str));
        }
    }
}

这种算法也不赖。

还有一种解法,就是我正序遍历字符串,每次计数器加1,遇到空格置0,那么最后一个单词的长度就能统计出来了:

#include <stdio.h>

int main() {
    char str[5000];
    int i = 0;
    int count = 0;
    while (scanf("%c", &str[i]) != EOF)
    {
        if (str[i] == ' ')
        {
            count = 0;
        }
        else
        {
            count += 1;
        }
    }
    printf("%d\n", count-1);
    return 0;
}

当然了,我还是最倾向于我自己最开始想出来的算法,从后往前遍历:

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

#define SIZE 5000

int main() {
    char array[SIZE];
    gets(array);
    int count = 0;
    int len = strlen(array);
    for (int i = len - 1; i >= 0; i--)
    {
        if (array[i] == ' ')
        {
            break;
        }
        count += 1;
    }
    printf("%d\n", count);
    return 0;
}

最近在学C++,于是写个C++版本的:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    getline(cin, str);

    int count = 0;
    int len = str.length();
    for (int i = len - 1; i >= 0; i--)
    {
        if (str[i] != ' ')
        {
            break;
        }
        count += 1;
    }
    cout << count << endl;
    return 0;
}