有关字符串输出的问题

大神们,如何在确认了一个字符串比如“abcde”,如何用代码实现输出“a;b;c;d;e;ab;ac;ad;ae.......”
从一个到5个字符所有的排列组合,而且每一个组合里面还不能有重复的字符,

 using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            string metachars = "abcde";

            for (int i = 1; i <= metachars.Length; i++)

            {

                foreach (string s in foo(metachars, i))

                {

                    Console.WriteLine(s);

                }

            }

        }



        static IEnumerable<string> foo(string metachars, int i)

        {

            var query = metachars.Select(x => x.ToString().AsEnumerable());

            while (query.First().Count() < i)

                query = query.SelectMany(x => metachars.Where(y => y > x.Last()).Select(y => x.Concat(y.ToString().AsEnumerable())));

            return query.Select(x => string.Join(",", x));

        }

    }

}

这道题面腾讯的时候,被问过,就是典型的递归操作,你自己手动模拟下递归过程,很容易写出来的

给定一串字符串,反向输出!
//本程序利用字符串处理里的charAt()方法,注意输入的时候不仅仅是字符,还可以时数字或@#¥%……&*();
import javax.swing.JOptionPane;

public class StringCharAT {
public static void main(String args[]) {
String str = JOp......
答案就在这里:字符串的反串输出问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

http://ideone.com/BDTcZ5

a
b
c
d
e
a,b
a,c
a,d
a,e
b,c
b,d
b,e
c,d
c,e
d,e
a,b,c
a,b,d
a,b,e
a,c,d
a,c,e
a,d,e
b,c,d
b,c,e
b,d,e
c,d,e
a,b,c,d
a,b,c,e
a,b,d,e
a,c,d,e
b,c,d,e
a,b,c,d,e

在线运行验证通过

#include
#include
#include
#include
using namespace std;

void deal_str(char *, char *);
void deal_str(char *str,char *pBegin)
{
if (*pBegin == '\0')
{
cout <<str<< " ";
}
else
{
for (char *pch = pBegin; *pch != '\0'; pch++)
{
char temp=*pch;
*pch = *pBegin;
*pBegin = temp;

        deal_str(str, pBegin + 1);

         temp = *pch;
        *pch = *pBegin;
        *pBegin = temp;

    }

}

}
int main(int argc, char **argv)
{
char str[] = "abcde";
char *pBegin = str;
deal_str(str, pBegin);
system("pause");
return 0;
}

 #include<iostream>
#include<stdlib.h>
#include<string>
#include<stdio.h>
using namespace std;

void deal_str(char *, char *);
void deal_str(char *str,char *pBegin)
{
    if (*pBegin == '\0')
    {
        cout <<str<< "      ";
    }
    else
    {
        for (char *pch = pBegin; *pch != '\0'; pch++)
        {
            char temp=*pch;
            *pch = *pBegin;
            *pBegin = temp;

            deal_str(str, pBegin + 1);

             temp = *pch;
            *pch = *pBegin;
            *pBegin = temp;

        }

    }
}
int main(int argc, char **argv)
{
    char str[] = "abcde";
    char *pBegin = str;
    deal_str(str, pBegin);
    system("pause");
    return 0;
}

 #include<iostream>
#include<stdlib.h>
#include<string>
#include<stdio.h>
using namespace std;
void OutPut(char *dest);
void GetPowerSet(int i, char A[], char B[]);
void deal_str(char *, char *);
void deal_str(char *str,char *pBegin)
{
    if (*pBegin == '\0')
    {
        cout <<str<< "      ";
    }
    else
    {
        for (char *pch = pBegin; *pch != '\0'; pch++)
        {
            char temp=*pch;
            *pch = *pBegin;
            *pBegin = temp;

            deal_str(str, pBegin + 1);

             temp = *pch;
            *pch = *pBegin;
            *pBegin = temp;

        }

    }
}

int main(int argc, char **argv)
{
    char A[] = "abcd";
    int size_B = strlen(A) + 1;
    char* B = new char[size_B];
    memset(B, 0, size_B);
    GetPowerSet(0, A, B);
    system("pause");
    delete B;
    return 0;
}



void OutPut(char *dest)
{
//  for (; *dest; dest++)    cout << *dest << " ";
    char *pBegin = dest;
    deal_str(dest, pBegin);
    cout << endl;
}

void GetPowerSet(int i, char A[], char B[])
{
    if (i == strlen(A))    OutPut(B);
    else
    {
        char x = A[i];    
        int k = strlen(B);
        B[k] = x;        GetPowerSet(i + 1, A, B);  
        B[k] =0;         GetPowerSet(i + 1, A, B);        
    }
}

图片说明