C语言 写一个程序,讲一个字符串中的所有旋转后的字符串组合输出,每次只能旋转一个字符。

写一个程序,讲一个字符串中的所有旋转后的字符串组合输出,每次只能旋转一个字符。李若愚,字符串“fine”产生的旋转组合为:
fine inef nefi efin

额。。。这个代码用C++ 的 STL 还是很简单就能实现的,只是不知道是不是满足你
的要求。。。

//我先说原理吧,
/* 1: 建立一个链表,保存字符串,是将每个字符单独保存的。
2: 将该字符串保存在字符串数组中。
3:删除第一个字符,并将该字符插入链表尾,、
4: 循环,直到所有的字母都被翻转。。。。
代码如下:
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <iterator>
#include <algorithm>

using namespace std;

int main()
{
vector<string> str_vec;///这个是个数组,你可以这么理解,保存的是字符串;
list<char> c_list; //这个是链表,每个节点保存一个字符。
string str;
cout<<"input : ";
cin>>str;
c_list.insert(c_list.begin(),str.begin(),str.end());
ostream_iterator<char> os(cout," ");
copy(c_list.begin(),c_list.end(),os);
cout<<endl;

int num=str.size();
while(num--)
{
string temp(c_list.begin(),c_list.end());
str_vec.push_back(temp);

list<char>::iterator itr=c_list.begin();
char ch=*itr;
c_list.erase(itr);
c_list.push_back(ch);
}
ostream_iterator<string> os1(cout," ");
copy(str_vec.begin(),str_vec.end(),os1);
return 0;
}

有些函数接口你也许没接触到,但是你查一些资料就明白了。。。

希望对你有用。。。

祝: 事事顺心,学业有成。。。。 by sxl
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-23
#include<stdio.h>
#include<string.h>

int main()
{
int i;
int j;
int k;
int length;

char str[128];
memset(str,0,sizeof(str));
gets(str);
length=strlen(str);

for(i=0;i<length;i++){
for(j=i,k=0;k<length;j++){
if(j>=length){
j= j-length;
}
printf("%c",str[j]);
k++;
}
printf("\n");
}
return 0;
}
相似回答