在内部for循环内
对于(int h=0;h<26;h++){如果(x[i]==arr1[h]){x[i]=arr1[h+1];}}
如果这封信x(i)
在数组中找到arr1型
在位置小时
然后改成字母arr1[小时+1]
由于这个声明
x[i]=arr1[h+1];
因此,在for循环的下一次迭代中(如果小时+1
小于26
)再次找到更新后的字母,并将其更改为数组中的下一个字母arr1型
。for循环的迭代在条件小时<26
是真的。作为for循环最后一次迭代的结果,表达式arr1[h+1]
访问数组外部的内存arr1型
调用未定义的行为。
只要有一个等于表达式的字母,就需要中断内部for循环x(i)
在数组中找到arr1型
如果找到的信是“z”
(数组的最后一个元素)需要分配给表达式x(i)
字母“a”(arr1[0]
)而不是表达arr1[h+1]
但要注意使用打破
循环中的语句通常是一种糟糕的编程风格。此外,没有必要使用普通for循环来引入辅助变量我
和小时
例如,可以使用基于范围的For循环代替外部For循环。也不要使用幻数作为26
。通常使用幻数会导致程序中出现错误。
至少你可以写包括标题<迭代器>
以下方式
字符arr1[]={'a','b','c','d',“e”、“f”、“g”、“h”、,“i”、“j”、“k”、“l”、,'m','n','o','p',“q”、“r”、“s”、“t”、,“u”、“v”、“w”、“x”、,“y”、“z”};//...对于(size_th=0;h<std::size(arr1));h++){
或者for循环语句也可以这样编写
对于(size_th=0,n=std::size(arr1));h<n;h++){
我可以提出以下解决方案。
#包括<iostream>#包括<string>#包含<字符串视图>#包含<迭代器>整型main(){const std::string_view lower_case_letters=“abcdefghijklmnopqrstuvwxyz”;if(标准::字符串s;标准::getline(标准:;cin,s)){for(char&c:s){auto pos=lower_case_letters.find(c);if(pos!=标准::字符串视图::npos){c=小写字母[(pos+1)%std::size(小写字母)];}}标准::cout<<s<<'\n';}}
程序输出可能如下所示
abcxyz公司卡迪扎