c - 编写 C 程序删除字符串之间的空格

标签 c

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

这是我的代码:

#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

关于c - 编写 C 程序删除字符串之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790401/

相关文章:

c - strcpy 上的段错误

c - C:指向结构的指针数组的指针(分配/解除分配问题)

c - 结构填充和包装

c - 初始化分配数组的大小

在 C 中的另一个函数调用的函数中使用 malloc 会导致崩溃 [VS2010]

c - 移位操作的奇怪结果

c - 多线程等待的 `pthread_mutex_lock()` 唤醒顺序是什么?

c - 声明空数组

c - 用C程序访问sqlite

c - 如何在 C 中将 float 放入 char 数组中?