我想创建一个程序来删除字符串中字符之间的空格。

这是我的代码:

#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int main(){
    char  str[10]="I love you",temp[20];
    int i,j;
    for(i=0;str[i];i++){
        if(str[i] ==" "){
        }
        else{
            temp[j]=str[i];
            j++;
        }
    }
    temp[j]='\0';
    strcpy(str,temp);
    printf("%s",str);
}

最佳答案

您的程序有几个问题。

尽管此字符数组的初始化在C中有效

char  str[10]="I love you",temp[20];
         ^^^^


但是,数组str将不包含字符串文字"I love you"的结尾零,因为字符串文字包含11个字符,包括结尾的零。这给阵列的处理带来一些困难。

最好像这样声明数组

char  str[11]="I love you",temp[20];
         ^^^^


或喜欢

char  str[]="I love you",temp[20];
         ^^^^


在这种情况下,数组将包含终止零。

在此声明中

if(str[i] ==" ") {
            ^^^^


将字符与指针进行比较,因为字符串文字" "被隐式转换为指向其第一个字符的指针。

我认为您的意思是字符常量而不是字符串文字

if(str[i] == ' ') {
             ^^^^


考虑到变量j尚未初始化。因此,该程序具有未定义的行为。至少你应该写

int i,j = 0;
      ^^^^^


并且可以在不使用辅助数组的情况下编写程序。

例如,它可以通过以下方式查看

#include <stdio.h>

int main( void )
{
    char  str[] = "I love you";

    size_t i = 0;

    while ( str[i] && str[i] != ' ' ) i++;

    size_t j = i;

    while ( str[i] )
    {
        if ( str[++i] != ' ' ) str[j++] = str[i];
    }

    puts( str );
}


它的输出是

Iloveyou

10-07 19:28
查看更多