通过简单算法去熟悉c++语法
/**
*
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
输入格式
输入为一个字符串(字符串长度至多为100)。
输出格式
输出为按要求排序后的字符串。
输入样例:
I am a student
输出样例:
student a am I
将输入字符串转换为串流形式,然后将每个字符串按倒序存到一个数组中,
*/
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string>
using namespace std;
int main(){
string str;
getline(cin,str);
stringstream ssin(str);
string res;
string a;
while(ssin >> a){
res = a +' '+ res;
}
// printf("%s",res);
cout << res;
system("pause");
return 0;
}
/**
*
*
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。
例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。
输入格式
共一行,包含两个字符串,中间由单个空格隔开。
字符串只包含字母和数字,长度不超过30。
输出格式
如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。
输入样例:
AABCD CDAA
输出样例:
true
* */
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
string a,b;
cin >> a >> b;
if(a.size() < b.size()) swap(a,b);
for(int i=0;i<a.size();i++){
a = a.substr(1) + a[0];
for(int j = 0;j+b.size()<=a.size();j++){
int k = 0;
for(;k+j<a.size();k++)
if(a[k+j]!=b[k]) break;
if(k == b.size()){
puts("true");
system("pause");
return 0;
}
}
}
puts("false");
system("pause");
return 0;
}
/**
* 给定两个字符串a和b,我们定义a*b为他们的连接。
例如,如果a=”abc” 而b=”def”, 则a*b=”abcdef”。
如果我们将连接考虑成乘法,一个非负整数的乘方将用一种通常的方式定义:a0
=””(空字符串),a(n+1)=a∗(an)
。
输入格式
输入包含多组测试样例,每组测试样例占一行。
每组样例包含一个字符串s,s的长度不超过100。
最后的测试样例后面将是一个点号作为一行。
输出格式
对于每一个s,你需要输出最大的n,使得存在一个字符串a,让s=an
。
输入样例:
abcd
aaaa
ababab
.
输出样例:
1
4
3
根据读入的字符串,从第一个字符开始,看字符串是否是由它所组成 若是 输出含有几个它
若否 则截取前两个字符,看字符串是否由它组成 若是 输出含有几个它
若否 截取前三个 。。。 若是 。。。
若否 前四 。。。
* */
#include <iostream>
#include <string.h>
using namespace std;
int main(){
string str;
while(cin >> str,str !="."){
for(int i = 1;i<=str.size();i++){
int y = str.size()%i;
// cout << str.size() << endl;
if(y == 0){
int n = str.size()/i;
string res="";
string s = str.substr(0,i);
for(int j = 0;j< n;j++) res+=s;
// cout << res <<endl;
if(res == str){
cout << n << endl;
break;
}
}
}
}
system("pause");
return 0;
}