簡體   English   中英

在C程序中刪除多余的空間,在新行中打印每個單詞

[英]print each word in new line with removing extra space in c programming

我的源代碼

    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]!=' '){
            str2[j]=str[i];
            flag=1;
        }

        if(flag==1 && str2[j]!=' ')
        {
           printf("\n");
           printf("%c",str2[j]);

           flag=0;
        }
    }

我的輸出:

I am      joe

I
a
m
j
o
e

但是我想要這樣的輸出:

I 
am
joe

我希望每個單詞都在換行中打印,就像I在一行中am在另一行中一樣, joe在另一行中也需要在joe之前刪除多余的空間

我發現用新行替換空格字符會更容易

#include <stdio.h>

int main() {
  char str[] = "I am joe";

  for(int i = 0; str[i] != '\0'; i++) {
    if(str[i] == ' ')
      str[i] = '\n';
  }

  printf("%s\n", str);
  return 0;
}

您只需要弄清楚如何修剪這些多余的空間即可。...

例如,當您對輸入“ I am joe”的“ a”進行程序分析時,第一個if語句使str2 [j]為'a'且標志為1,因此如果條件為true,則下一個條件為printf完成這項工作,打印換行符和'a';

char str[100] = "I am      joe";
char str2[100] = {0};
int i,j;

/*flag means alread replace space to newline,so ignore continuous space*/
int flag = 0;

for(i=0, j=0;str[i]!='\0';i++)
{   
    if(str[i] ==' '){
        if(flag != 1){ 
            str2[j++] = '\n';
            flag = 1;
        }   
    }   
    else{
        str2[j++] = str[i];
        if(flag == 1){ 
            flag = 0;
        }   
    }   

}   

printf("%s\n", str2);
return 0;

您應該學習如何使用GDB等調試工具。

您可以遵循Gabriele方法,但是如果您不想放置換行符而不是空格,則可以這樣做。

在這里,我們只有一個循環,無論我們在哪里看到空間,我們都在打印換行符,否則繼續打印字符串和循環符,直到當str[i]='\\0'達到i的值時,循環才停止。

#include <stdio.h>

int main() {

  int i = 0;
  char str[] = "I am joe";

  while (str[i] != '\0') {

    if (str[i] == ' ')     
      printf("\n");

    else
      printf("%c", str[i]);

    i++;

  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM