gpt4 book ai didi

c - 替换c字符串中的字符

转载 作者:行者123 更新时间:2023-11-30 20:40:37 32 4
gpt4 key购买 nike

我在替换 C 字符串中的字符时遇到问题。我有一个名为“bits”的 C 字符串,初始化为由 0 和 1 组成的十六位字符串。我想做的是将字符串转换为二进制补码版本。我学到的是一个简单的作业,例如

int twosComplement(int number,char *binary){
printf("searching for twos complement\n");
int temp=number * -1;
if(temp<-32768)
return 0;
printf("%d\n",temp);
char bits[17]="";
int i;
int x=0;
int y;
for(i=15;i>=0;i--){
y=pow(2,i);
if(temp%y!=temp){
temp=temp%y;
strcat(bits,"1");;
}
else{
strcat(bits,"0");
}
printf("%s\n",bits);
x++;
}

for(x=0;x<16;x++){
if(bits[x]=='0'){
*bits="a";
}
else{
strcat(bits,"1");
}
printf("%s\n",bits);
}

在 C 中是非法的,因为位实际上是指向字符串中第一个字符的指针,因此它会提示从整数到指针的赋值而不进行强制转换。

以上是该函数的代码。第一部分工作正常,并创建正数的正确 16 位表示。在下一部分中,我想查看字符串的每个字符并替换为替代字符。该代码可以编译,但无法工作,因为我正在连接。另外,我认为它没有正确读取每个字符的数字。

最佳答案

此代码可以通过命令行在 Mac OS X 10.9.1 Mavericks 上使用 GCC 4.8.2 进行干净地编译:

gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition -Werror bits.c -o bits

来源:

#include <math.h>
#include <stdio.h>
#include <string.h>

extern int twosComplement(int number);

int twosComplement(int number)
{
printf("searching for twos complement of %d\n", number);
int temp = number * -1;
if (temp < -32768)
return 0;
printf("%d\n", temp);
char bits[17] = "";
int i;
int x = 0;
int y;
for (i = 15; i >= 0; i--)
{
y = pow(2, i);
if (temp % y != temp)
{
temp = temp % y;
strcat(bits, "1");
}
else
{
strcat(bits, "0");
}
printf("%s\n", bits);
x++;
}

printf("One's complement:\n");
for (x = 0; x < 16; x++)
{
if (bits[x] == '0')
bits[x] = '1';
else
bits[x] = '0';
printf("%s\n", bits);
}
return 0;
}

int main(void)
{
twosComplement(23);
return 0;
}

输出:

searching for twos complement of 23
-23
0
00
000
0000
00000
000000
0000000
00000000
000000000
0000000000
00000000000
000000000001
0000000000010
00000000000101
000000000001011
0000000000010111
One's complement:
1000000000010111
1100000000010111
1110000000010111
1111000000010111
1111100000010111
1111110000010111
1111111000010111
1111111100010111
1111111110010111
1111111111010111
1111111111110111
1111111111100111
1111111111101111
1111111111101011
1111111111101001
1111111111101000

您仍然需要实现补码的 +1 部分。

在这样的循环中使用 strcat() 时要小心。它会导致二次运行时行为,因为 strcat() 在添加新字符之前必须跳过以前的内容,因此它会跳过 0+1+2+3+4+...N-1 个字符,总共跳过了 N(N-1)/2 个字节。

关于c - 替换c字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371246/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com