通过删除c编程中的额外空格来打印新行中的每个单词

时间:2017-01-26 04:52:09

标签: c

我的源代码

    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也需要在{{1}之前删除额外的空格}

3 个答案:

答案 0 :(得分:2)

我发现用新行替换空格字符更容易

#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;
}

你需要弄清楚的是如何修剪这些额外的空间......

答案 1 :(得分:1)

例如,当您编程解析&#39; a&#39;你的输入&#34;我是乔&#34;,第一个if语句使str2 [j]是&#39; a&#39;和标志是1,所以下一个条件当然是真的,然后printf做的工作,打印换行和&#39; a&#39 ;;

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之类的调试工具。

答案 2 :(得分:1)

您可以遵循Gabriele方法,但如果您不想放置换行符而不是空格,那么您可以这样做。

这里我们只有一个循环,无论我们在哪里看到空格我们都在打印换行符,否则打印字符串的字符并循环继续直到i达到str[i]='\0'时的值,然后循环停止。 / p>

#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++;

  }

}