#include <iostream> using namespace std; int main() { string a; getline(cin, a); for(int i = 0; i < a.size(); ++i) cout << (char)(a[i] + a[(i + 1) % a.size()]); return 0; }
$E=mc^{2}$
我题目都没看懂。。。
为什么写b[i]=(char)(a[i]+a[(i+1)%a.size()]);就错了
#include[HTML_REMOVED] using namespace std; int main() { string s; getline(cin,s); for(int i=0;i<s.size();i++){ if(i<s.size()-1) printf(“%c”,s[i]+s[i+1]); else printf(“%c\n”,s[i]+s[0]); } return 0; }
空格是怎么考虑的
orz
都说orz,这是啥意思
连在一起看,像一个小人跪着膜拜
#include <iostream> using namespace std; int main() { string a, b; getline(cin, a); int l = a.size(); for (int i = 0; i < l; i++) { b += a[i] + a[(i + 1) % l]; } cout << b << endl; return 0; }
我的写法类似,不过论极简还得是老哥你hhh.
为什么这么写b=b+a[i]+a[(i+1)%a.size()];结果就出错了呢
用string的话,你这样写把b+后面的两项用()括起来应该就可以了
#include[HTML_REMOVED] using namespace std; int main() { string a,b; getline(cin,a); for(int i = 0;i < a.size();i++) b += (char)(a[i]+a(i+1) % a.size()]); cout<<b<<endl; return 0; } 我这个为什么过不了啊
(char)(a[i]+a(i+1) % a.size()]); (char)(a[i]+a[(i+1) % a.size()]);//少个[ (char)不用写,后面本来就是字符;
少女口啊
为什么要对那个字符串长度取余?大佬求解
考虑到最后一个字符不能直接往后面继续加,取余后就加了第一个字符
好的,谢谢
为什么取余后就加了第一个字符
长度为L,算到最后一位L时,L对L取模刚好是0.
大佬,这个为啥是两个字符相加然后强转为char
字符相加底层会让它的ASCII码相加,然后把数字转成char
膜拜大佬
#include <iostream> using namespace std; int main() { string a,b; getline(cin,a); b=a; for(int i=0;i<a.size();i++) { b[i]=a[i]+a[(i+1)%a.size()]; } cout<<b<<endl; return 0; }
大佬这个为啥要有b=a这一行
这个取模有点不明白
蛇形矩阵那讲过 0->1 1->2......n-1->n n->0 可以用 i=(i+1)%(n+1)实现
取模,为啥我总想不到orz
一般像有固定长度,依次向后的取,到最后面,再从第一个开始取,这种模型一般都可以用取余
#include<iostream> #include<string> using namespace std; int main() { string s1,s2; getline(cin,s1); int len=s1.size(); for(int i=0;i<len;i++) s2[i]=s1[i]+s1[(i+1)%len]; puts(s2.c_str()); }
为啥这里最后直接cout<<s2;不行呢
同想问
上网查了一下,这种写法中在s2赋值的时候没有改变s2的s2.size()属性,它默认s2还是长度为0,所以输出的时候按照长度为0输出。
#include<iostream> #include<string> using namespace std; int main() { string s1,s2; getline(cin,s1); int len=s1.size(); for(int i=0;i<len;i++) s2 += s1[i]+s1[(i+1)%len];//修改 cout<<s2; }
改成这样就可以了
也就是说必须把s2一个一个拼接起来
cout<<s2.c_str();是可以的
妙啊
$E=mc^{2}$
我题目都没看懂。。。
为什么写b[i]=(char)(a[i]+a[(i+1)%a.size()]);就错了
#include[HTML_REMOVED]
using namespace std;
int main()
{
string s;
getline(cin,s);
for(int i=0;i<s.size();i++){
if(i<s.size()-1) printf(“%c”,s[i]+s[i+1]);
else printf(“%c\n”,s[i]+s[0]);
}
return 0;
}
空格是怎么考虑的
orz
都说orz,这是啥意思
连在一起看,像一个小人跪着膜拜
我的写法类似,不过论极简还得是老哥你hhh.
为什么这么写b=b+a[i]+a[(i+1)%a.size()];结果就出错了呢
用string的话,你这样写把b+后面的两项用()括起来应该就可以了
#include[HTML_REMOVED]
using namespace std;
int main()
{
string a,b;
getline(cin,a);
for(int i = 0;i < a.size();i++) b += (char)(a[i]+a(i+1) % a.size()]);
cout<<b<<endl;
return 0;
}
我这个为什么过不了啊
(char)(a[i]+a(i+1) % a.size()]);
(char)(a[i]+a[(i+1) % a.size()]);//少个[
(char)不用写,后面本来就是字符;
少女口啊
为什么要对那个字符串长度取余?大佬求解
考虑到最后一个字符不能直接往后面继续加,取余后就加了第一个字符
好的,谢谢
为什么取余后就加了第一个字符
长度为L,算到最后一位L时,L对L取模刚好是0.
大佬,这个为啥是两个字符相加然后强转为char
字符相加底层会让它的ASCII码相加,然后把数字转成char
膜拜大佬
大佬这个为啥要有b=a这一行
这个取模有点不明白
蛇形矩阵那讲过 0->1 1->2......n-1->n n->0 可以用 i=(i+1)%(n+1)实现
取模,为啥我总想不到orz
一般像有固定长度,依次向后的取,到最后面,再从第一个开始取,这种模型一般都可以用取余
为啥这里最后直接cout<<s2;不行呢
同想问
上网查了一下,这种写法中在s2赋值的时候没有改变s2的s2.size()属性,它默认s2还是长度为0,所以输出的时候按照长度为0输出。
改成这样就可以了
上网查了一下,这种写法中在s2赋值的时候没有改变s2的s2.size()属性,它默认s2还是长度为0,所以输出的时候按照长度为0输出。
改成这样就可以了
也就是说必须把s2一个一个拼接起来
cout<<s2.c_str();是可以的
妙啊