zoukankan      html  css  js  c++  java
  • 如何输出一个字符串的所有组合

    方法一:递(sangxin)归(bingkuang)法,遍历字符串,每个字符只能取或不取。取该字符的话,就把该字符放到结果字符串中,遍历完毕后,输出结果字符串。

    代码如下:

    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    void CombineRecursiveImpl(const char* str, char* begin, char* end)
    {
        if (*str == 0)
        {
            *end = 0;
            if (begin != end)
                printf("%s", begin);
            return;
        }
        CombineRecursiveImpl(str + 1, begin, end);
        *end = *str;
        CombineRecursiveImpl(str + 1, begin, end + 1);
    }
    void CombineRecursive(const char str[])
    {
        if (str == NULL)
            return;
        const int MAXLENGTH = 64;
        char result[MAXLENGTH];
        CombineRecursiveImpl(str, result, result);
    }
    int main()
    {
        CombineRecursive("abc");
        printf("
    ");
        getchar();
        return 0;
    }

        效果如图:

        方法二:字符串构造法,即构造一个长度为n的01字符串表示输出结构中是否包含某个字符。这需要两层循环,外层循环表示每个组合,内层循环表示每个组合分别取哪些字符。

    代码如下:

    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    void Combine(const char str[])
    {
        if (str == NULL || *str == 0)
            return;
        const int MAXLENGTH = 64;
        int len = strlen(str);
        bool used[MAXLENGTH] = { 0 };
        char cache[MAXLENGTH];
        char *result = cache + len;
        *result = 0;
        while (1)
        {
            int index = 0;
            while (used[index])
            {
                used[index] = false;
                result++;
                index++;
                if (index == len)
                    return;
            }
            used[index] = true;
            result--;
            *result = str[index];
            printf("%s ", result);
        }
    }
    int main()
    {
        Combine("abc");
        printf("
    ");
        getchar();
        return 0;
    }

        效果如图:

  • 相关阅读:
    【Java8】 @FunctionalInterface 函数式接口
    集合使用copy与mutableCopy的区别
    GCD中的dispatch_sync、dispatch_sync 分别与串行、并行队列组合执行小实验
    podspec文件介绍
    iOS系统app崩溃日志手动符号化
    webView文本长按显示英文
    深拷贝
    view向全屏延伸时的属性设置
    iOS 模拟器截屏快捷键
    mysql 优化常用语句
  • 原文地址:https://www.cnblogs.com/cysolo/p/3622552.html
Copyright © 2011-2022 走看看