我有一个填充了1和0的字符数组。如果在1之后有0,那么他们需要切换位置。循环重复k次。我写了这段代码,但是当我尝试打印字符串时,它不会打印出任何内容,或者只是打印出来1.为什么它会这样做以及它为什么不起作用?
#include <iostream>
using namespace std;
int const limit = 100000;
int main() {
int k;
char s[limit];
cin >> k;
cin >> s;
for (int i = 0; i < k; i++) {
for (int j = 0; j < strlen(s); j++)
if (s[j + 1] == '0' && s[j] == '1') {
s[j + 1] = '1';
s[j] = 0;
}
}
}
cout << s;
return 0;
}
答案 0 :(得分:1)
a)有一个错误的大括号。
b)您需要将s[j] = '0'
更改为#include <cstring>
#include <iostream>
using namespace std;
int const limit = 100000;
int main() {
int k;
char s[limit];
cin >> k;
cin >> s;
for (int i = 0; i < k; i++) {
for (int j = 0; j < strlen(s); j++) {
if (s[j + 1] == '0' && s[j] == '1') {
s[j + 1] = '1';
s[j] = '0';
}
}
}
cout << s;
return 0;
}
。
c)虽然不是错误,但为了澄清,我会在第二个for循环周围添加花括号。这使代码更容易阅读。
<a href="url" onclick="$('#menuID').css('display', 'none');">Click me!</a>
答案 1 :(得分:0)
我首先要理解上面的陈述:int const limit = 100000;
意味着(正如您所知)您已经分配了您的命名变量&#34; limit&#34;,一个100000的常数整数值。值100000是单个数值整数;不是&#39; 0&1&#39; 1的ASCII字符数组(如果我正确地思考你的想法)。数值100000在存储中分配一个位置,不能在代码中更改;除非你自己将代码更改为另一个值(即int const limit = 15;)。 (没有意义)。
//我的想法是你试图做这样的事情吗?
#include <iostream>
#include <string>
int(main) {
int k = 10;
char s[] = "0 1 0 1 0 1 1 0 1 1": // let the compiler count
// create a nested for loop to change the '0' char to a '1' char here as you
// want to do above.
.... code ....
return 0;
}
你说你有一个字符数组,s [limit],填充了1和0&#39; s。然后它们需要是ASCII系统名称。 &#39; 0&#39; 0和&#39; 1&#39;字符值不是整数值,例如在数组声明中:s [limit]。 &#34;限制&#34;是单个int值; 100000.你的数组[]被命名为&#34; s&#34;这是一个数据类型&#34; char&#34;存储字符;您已分配了一个数值。 (如果我的想法不正确,请纠正我,或者,我可以更好地自己编码)TY&gt;
答案 2 :(得分:0)
使用命名空间std; int const limit = 100000;
int main(){
int k;
char s[limit];
cout << "Enter a k limit: \n" ;
cin >> k;
cout << "You entered: " << k << endl;
cout << "Enter your 0's and 1's. \n";
cin >> s;
cout << "you entered: " << s << '\n';
for (int j = 0; j < k; j++) {
for (int i = 0; i < sizeof(s); i++) {
if (s[i + 1] == '0' && s[i] == '1') {
s[i + 1] = '1';
s[i] = '0';
}
}
cout << s;
}
return 0;
}