//如何实现字符串所有组合 //例如 输入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; } } }