C++ 如何在C+中列出长度为12的所有字符串+;?
我是一个学习自己编程的新手。我试着制作一个程序,列出所有长度为12的字符串,比如它的字符来自a-z。然而,我似乎发现了一个bug。例如,它输出C++ 如何在C+中列出长度为12的所有字符串+;?,c++,C++,我是一个学习自己编程的新手。我试着制作一个程序,列出所有长度为12的字符串,比如它的字符来自a-z。然而,我似乎发现了一个bug。例如,它输出单词is)。有人能告诉我我做错了什么吗?有没有更简单的方法来完成这个程序 #include <iostream> #include <string> int main(int argc, char *argv[]) { using namespace std; string l ("qwertyuiopasdfgh
单词is)。
有人能告诉我我做错了什么吗?有没有更简单的方法来完成这个程序
#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
using namespace std;
string l ("qwertyuiopasdfghjklzxcvbnm");
string test ("");
for(int i1 = 0;i1 < 26;++i1)
for(int i2 = 0;i2 < 26;++i2)
for(int i3 = 0;i3 < 26;++i3)
for(int i4 = 0;i4 < 26;++i4)
for(int i5 = 0;i5 < 26;++i5)
for(int i6 = 0;i6 < 26;++i6)
for(int i7 = 0;i7 < 26;++i7)
for(int i8 = 0;i8 < 26;++i8)
for(int i9 = 0;i9 < 26;++i9)
for(int i10 = 0;i10 < 26;++i10)
for(int i11 = 0;i11 < 26;++i11)
for(int i12 = 0;i12 < 26;++i12) {
test = l[i1]+l[i2]+l[i3]+l[i4]+l[i5]+l[i6]+l[i7]+l[i8]+l[i9]+l[i10]+l[i11]+l[i12];
cout << "The word is " << test << "." << endl;
test = "";
}
return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
使用名称空间std;
字符串l(“qwertyuiopasdfghjklzxcvbnm”);
字符串测试(“”);
对于(int i1=0;i1<26;++i1)
对于(int i2=0;i2<26;++i2)
对于(inti3=0;i3<26;++i3)
对于(inti4=0;i4<26;++i4)
对于(int i5=0;i5<26;++i5)
对于(int i6=0;i6<26;++i6)
对于(int i7=0;i7<26;++i7)
对于(int i8=0;i8<26;++i8)
对于(int i9=0;i9<26;++i9)
对于(int i10=0;i10<26;++i10)
对于(int i11=0;i11<26;++i11)
对于(int i12=0;i12<26;++i12){
测试=l[i1]+l[i2]+l[i3]+l[i4]+l[i5]+l[i6]+l[i7]+l[i8]+l[i9]+l[i10]+l[i11]+l[i12];
coutl[i1]+l[i2]
无法达到预期效果。您正在添加两个类型为char
的表达式,因此将得到类型为int
的结果
一个简单的解决方法是:
test = std::string() + l[i1]+l[i2]+l[i3]+l[i4]+l[i5]+l[i6]+l[i7]+l[i8]+l[i9]+l[i10]+l[i11]+l[i12];
l[i1]+l[i2]
无法达到预期效果。您正在添加两个类型为char
的表达式,因此将得到类型为int
的结果
一个简单的解决方法是:
test = std::string() + l[i1]+l[i2]+l[i3]+l[i4]+l[i5]+l[i6]+l[i7]+l[i8]+l[i9]+l[i10]+l[i11]+l[i12];
正如我在评论中提到的,当您看到这样的排列问题时,您应该考虑如何编写递归算法
在这种情况下,问问自己每个步骤(级别)是什么样子的。好吧,你得到了字符串,你需要遍历字母,你需要每次调用下一个级别,这样它就可以继续这个过程
将其转化为代码,“给定到这一点的字符串”意味着递归函数在前缀字符串中传递,并且一个数字指示它在链中的位置:
void print_all_strings(const std::string& prefix, unsigned remain) {
遍历字母是您已经得到的(使用for
循环)而不是把所有的字符输入到一个字符串中,并反复迭代这些字符,你最好意识到你可以在<代码>中迭代字符,以< /COD> >循环,就像你可以重复数字一样,因为字符是C++中的数字(和C)。。换句话说,'a'+1=='b'
等等。因此,您的循环变成:
for(char c = 'a'; c <= 'z'; c++)
在其他情况下,我们需要添加一个字母。std::string+char=>std::string
(注意char+char=>char
)
总而言之:
void print_all_strings(const std::string& prefix, unsigned remain) {
if(remain == 0) {
cout << "The word is " << prefix << "." << endl;
return;
}
for(char c = 'a'; c <= 'z'; c++)
print_all_strings(prefix + c, remain - 1);
}
int main(int argc, char *argv[])
{
print_all_strings("", 12);
return 0;
}
void打印所有字符串(常量std::字符串和前缀,未签名保留){
如果(保持==0){
cout正如我在评论中提到的,当你看到这样的排列问题时,你应该考虑如何编写递归算法
在这种情况下,问问自己每个步骤(级别)是什么样子的。好吧,你得到了字符串,你需要遍历字母,你需要每次调用下一个级别,这样它就可以继续这个过程
将其转化为代码,“给定到这一点的字符串”意味着递归函数在前缀字符串中传递,并且一个数字指示它在链中的位置:
void print_all_strings(const std::string& prefix, unsigned remain) {
遍历字母是您已经得到的(使用for
循环)而不是把所有的字符输入到一个字符串中,并反复迭代这些字符,你最好意识到你可以在<代码>中迭代字符,以< /COD> >循环,就像你可以重复数字一样,因为字符是C++中的数字(和C)。。换句话说,'a'+1=='b'
等等。因此,您的循环变成:
for(char c = 'a'; c <= 'z'; c++)
在其他情况下,我们需要添加一个字母。std::string+char=>std::string
(注意char+char=>char
)
总而言之:
void print_all_strings(const std::string& prefix, unsigned remain) {
if(remain == 0) {
cout << "The word is " << prefix << "." << endl;
return;
}
for(char c = 'a'; c <= 'z'; c++)
print_all_strings(prefix + c, remain - 1);
}
int main(int argc, char *argv[])
{
print_all_strings("", 12);
return 0;
}
void打印所有字符串(常量std::字符串和前缀,未签名保留){
如果(保持==0){
这可能会让人很困惑。任何时候你发现自己像那样重复,都要考虑做一个函数。在这种情况下,是一个递归函数。至于你做错了什么,像l[i1]
这样的表达式会返回一个字符(由于传统的C支持)也被视为整数,而不是长度为1的字符串。因此,当您“添加”他们,你在添加字符代码并得到一个新的代码。@JonathanWood:我个人完全不同意。我可以在大约10秒钟内阅读和理解这段代码。当然很难扩展或使其通用,但这并不意味着代码令人困惑。@BillLynch:你认为我试图制作一个列出所有字符的程序的句子吗l长度为12的字符串(例如其字符来自a-z)构造得很好?你认为适当的缩进不会使代码更容易阅读吗?你真的认为这里的概念表达得很好吗?所有字符串?你估计过要打印多少字符串吗?假设你每秒打印一百万个字符串,你将需要大约3000个s年来完成这项任务。这可能会让人很困惑。每当你发现自己像那样重复时,请考虑创建一个函数。在这种情况下,是一个递归函数。至于你做错了什么,像l[i1]
这样的表达式会返回一个字符(由于传统的C支持)也被视为整数,而不是长度为1的字符串。因此,当您“添加”他们,你在添加字符代码并得到一个新的代码。@JonathanWood:我个人完全不同意。我可以在大约10秒钟内阅读和理解这段代码。当然很难扩展或使其通用,但这并不意味着代码令人困惑。@BillLynch:你认为我试图制作一个列出所有字符的程序的句子吗l长度为12的字符串,如其字符