我正在使用标准的gcc编译器。我试图从字符串中删除空格。但我得到了以下输出。这里有什么问题?我正在做[s2 + 1] ='\ 0',但为什么不在[s1 + 1] ='\ 0'中工作。请解释。
输出:
切割s1后:Ilikerambob
切割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);
}
答案 0 :(得分:2)
这条线几乎肯定不符合你的意图。
in[s1+1]='\0';
这会在字符\0
处插入字符串终止字符s1+1
,但由于您的循环中有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);
}