Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 替换字符数组c+中的字符+;_C++_Arrays_String_Char - Fatal编程技术网

C++ 替换字符数组c+中的字符+;

C++ 替换字符数组c+中的字符+;,c++,arrays,string,char,C++,Arrays,String,Char,我有一个用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 >&

我有一个用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;
}
#包括
使用名称空间std;
int const limit=100000;
int main(){
int k;
字符s[限制];
cin>>k;
cin>>s;
for(int i=0;i
b) 您需要将
s[j]=0
更改为
s[j]=0'

c) 虽然不是一个错误,为了澄清,我将在第二个for循环周围添加大括号。这使得代码更容易阅读

#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;
}
#包括
#包括
使用名称空间std;
int const limit=100000;
int main(){
int k;
字符s[限制];
cin>>k;
cin>>s;
for(int i=0;icout我首先要理解上面的语句:
int const limit=100000;
表示(正如您已经知道的)您已经为命名变量“limit”指定了一个100000的常量整数值。100000是一个单一的数值整数;不是一个“0”和“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;
}
#包括
#包括
内部(主要){
int k=10;
char s[]=“0 1 0 1 0 1 1”://让编译器计数
//创建嵌套for循环,以便在此处将“0”字符更改为“1”字符
//想做以上的事。
密码
返回0;
}
您说您有一个字符数组s[limit],用1和0填充。然后它们必须是ASCII系统名称。“0”和“1”是字符值,而不是整型值,如在数组声明中:s[limit]。“limit”是单个整数值;100000。您的数组[]名为“s”,数据类型为“char”存储字符;您只指定了一个数值。(如果我的想法不正确,请纠正我,或者,可以改进我自己的编码)TY>

包括 包括 使用名称空间std; int const limit=100000

int main(){

intk;
字符s[限制];
cout>k;

cout
s[j]=0;
应该是
s[j]='0';
!也因为第19行的
}
此代码不会编译。为了对Ken的注释进行更多澄清,值0(或NUL)有效地“终止”字符串。使用
s[j]=0;
您正在设置一个空字符,因为ASCII代码“0”属于空字符。因此最好将其设置为
s[j]='0';
Opps.Not.不打印。返回绘图板。请确保您的代码位于正确的代码部分。Rakesh,您可以指导我在哪里阅读并了解如何正确地在堆栈上进行注释?抱歉=NUBIE这里。我想正确使用它。我应该使用下面的吗?按照路径…在下面找到它。TY
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;