//如何实现字符串所有组合
//例如 输入abc 输出a b c ab ac bc abc
void subset(int n,vector<char>c)
{
for(int i= 1 ; i < (1<<n) ; ++i) //i从1到8
{
for(int j = 0 ; j < n ; ++j)
{
if( i&(1<<j) ) // 判断i的二进制中哪些位为1,即代表取某一位
cout<<c[j];
}
cout<<endl;
}
}
int main()
{
char c;
vector<char>ch;
while ((c=getchar())!='\n') //注意这里的输入结束判断
{
ch.push_back(c);
}
int len=ch.size();
subset(len,ch);
}
//字符串输入也可以用下面的代码
string str;
cin>>str;
int len=str.length();
vector<char>ch(len);
for (int i=0;i<len;i++)
{
ch[i]=str[i];
}
//求一句话里单词的个数 前面空格后面非空格 计数器加1
//she is a good girl ====5个
int CountWords(char c[])
{
int word=0;
int sum=0;
char *p=c;
for (;*p!='\0';p++)
{
if (*p==' ')
{
word=0;
}
else if (word==0)
{
word=1;
sum++;
}
}
return sum;
}
//字符串逆序abcd ----dcba
//定义两个指针 一个在首 一个在尾 两个交换
//然后都往中间移动 一直到有交叉
char *ReversStr(char *pStr)
{
char *p=pStr;
char *q=pStr;
while (*q)
{
q++;
}
q--;//因为q指向了最后的'\0'所以要前移
while(q>p)
{
char temp=*p;
*p++=*q;
*q--=temp;
}
return pStr;
}
//按单词逆序
//she is a good girl
//==girl good a is she
//第一步先对每个单词逆序
// ehs si a doog lrig
//第二步 对上面句子整体逆序
//具体由下面两个函数实现
//将一个字符串逆序 this --siht
void RevserseWord(char *first,char *last)
{
while (first<last)
{
char temp=*first;
*first=*last;
*last=temp;
first++;
last--;
}
}
//总函数
char *ReverseString(char *s)
{
char *p=s;
char *q=s;
while (*q!='\0')
{
if (*q==' ')//只是反转到倒数第二个单词
{
RevserseWord(p,q-1);
q++;//q指向下一个单词首字母
p=q;//p移动向下一个单词首字母
}
else
q++;
}
q--;
RevserseWord(p,q);//最后一个单词调换顺序
RevserseWord(s,q);
return s;
}
//如何实现字符串的逆序打印
void ReversPrint(char *s)
{
if (s==NULL)
{
cout<<"NO CHAR"<<endl;
exit(0);
}
char *p=s;
while (*p!='\0')
{
p++;
}
p--;
while(p>=s)
{
cout<<*p;
p--;
}
}
//统计字符串中每个字符出现的次数
#include <iostream>
#include <string>
using namespace std;
void main()
{
string str;
cout<<"please input the string:";
cin>>str;
int len=str.length();
int count[256]={0};
for (int i=0;i<len;i++)
{
count[str[i]]++;
}
for (int i=0;i<256;i++)
{
if (count[i]>0)
{
cout<<"The number of "<<(char)i<<" is "<<count[i]<<endl;
}
}
}