我的源代码
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}之前删除额外的空格}
答案 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++;
}
}