gpt4 book ai didi

字符写入数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:36 25 4
gpt4 key购买 nike

我正在使用标准的 gcc 编译器。我正在尝试从字符串中删除空格。但我得到以下输出。这里有什么问题?它在我执行 out[s2+1] = '\0' 时有效,但为什么不执行 in[s1+1] = '\0'。请解释。

OUTPUT:
After cutting s1: Ilikerambob
After cutting s2: rambolikeI

int check_anagrams(char *in,char *out)
{
int i=0;
int s1=0,s2=0;
while(in[i]!='\0')
{
if(in[i]==' ')
{
i++;
in[s1]=in[i];
}
in[s1]=in[i];
i++;
s1++;
}
in[s1+1]='\0'; //Not working. Why?
printf("After cutting s1: %s\n",in);
i=0;
while(out[i]!='\0')
{
if(out[i]==' ')
{
i++;
out[s2]=out[i];
}
out[s2]=out[i];
i++;
s2++;
}
out[s2+1]='\0'; //Working. Why?
printf("After cutting s2: %s\n",out);
}

int main()
{
char in[100]="I like rambo";
char out[100]="rambo like I";
int ans;
ans = check_anagrams(in,out);
}

最佳答案

这一行几乎肯定不会按照您的意图进行。

in[s1+1]='\0';

这将在位置 s1+1 插入字符串终止符 \0,但是因为你的循环中有 s1++,由到达此行的时间 s1 已经在字符串的末尾。尝试将其替换为

in[s1] = '\0';

out 变量有同样的问题,你只是在输出中看不到它,因为幸运的是它输出的额外字符是一个空格。

复制代码总是有危险的。我强烈建议编写一个单独的 strip_spaces 例程并调用它两次,而不是将相同的代码编写两次。

#include <stdio.h>

void strip_spaces(char *str) {
int ii = 0, jj = 0;
while (str[ii]) {
str[jj] = str[ii];
if (str[ii++] != ' ')
++jj;
}
str[jj] = 0;
}

int check_anagrams(char *in,char *out) {
strip_spaces(in);
printf("After cutting s1: %s\n",in);
strip_spaces(out);
printf("After cutting s2: %s\n",out);
}

int main()
{
char in[100]="I like rambo";
char out[100]="rambo like I";
int ans;
ans = check_anagrams(in,out);
}

关于字符写入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797599/

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