C 逐字符打印字符串,不带空格
在我的家庭作业问题中,我的老师希望我们编写一个程序,在新行上逐字符打印字符串,但忽略空格,在同一行上打印重复字符。例如,逐字符打印“Hello World”将返回C 逐字符打印字符串,不带空格,c,string,pointers,printf,C,String,Pointers,Printf,在我的家庭作业问题中,我的老师希望我们编写一个程序,在新行上逐字符打印字符串,但忽略空格,在同一行上打印重复字符。例如,逐字符打印“Hello World”将返回 H e ll o W o r l d 我已经能够让我的代码一个字符一个字符地打印一个字符串,但我不能让它在同一行上打印重复项或忽略空格。我看了其他一些类似的问题,似乎这不是一件小事 #include <stdio.h> void print_string(const char instring[]); int mai
H
e
ll
o
W
o
r
l
d
我已经能够让我的代码一个字符一个字符地打印一个字符串,但我不能让它在同一行上打印重复项或忽略空格。我看了其他一些类似的问题,似乎这不是一件小事
#include <stdio.h>
void print_string(const char instring[]);
int main(void)
{
print_string("Hello World");
return 0;
}
void print_string(const char *instring)
{
while(*instring!='\0')
{
printf("%c\n",*instring++);
}
return;
}
但不是在理想的安排。我曾经考虑过实现一个do-while循环来忽略空格,但是对于在同一行上打印重复的字母,我感到很困惑。另外,如果你想知道我为什么使用指针,我们作业的前一部分是使用指针算法打印字符串的长度。不确定在没有指针的情况下是否可以更轻松地进行返工。在循环中
而(*instring!='\0')
必须有另一个循环来检查当前字符后面的字符。如果字符为空白,则还必须跳过该字符。例如:
while(*instring!='\0') {
if (isspace(*instring)) {
instring++;
} else {
printf("%c",*instring);
int i= 1;
while (*instring == *(instring+i)) {
printf("%c",*(instring+i));
i++;
}
printf("\n");
instring += i;
}
}
您可以使用指向上一个字符的指针,并使用该指针确定何时打印换行符。此外,在打印当前字符之前,需要检查空格。比如:
#include <stdio.h>
void print_string(const char instring[]);
int main(void)
{
print_string("Hello World");
return 0;
}
void print_string(const char *instring)
{
const char *p = NULL;
while(*instring!='\0')
{
if (p != NULL && *instring != *p && *instring != ' ') printf("\n");
if (*instring != ' ') printf("%c",*instring);
p = instring++;
}
printf("\n");
return;
}
如果你对每一个角色都做同样的事情,那就行不通了。对于不同的角色,你必须有不同的行为。继续努力!你试图解决这个问题的方法是什么?空间需求微不足道<代码>如果(字符是空格)跳过。对于另一个需求,有多种方法可以实现。您可以在while(thisChar eq lastChar)addToBuffer(thisChar)中设置一个缓冲区
,或者只跟踪指向重复字符开头/结尾的指针并打印该子字符串。谢谢。我没想到会有这么详细的答案。你真的帮了我复制角色的部分。谢谢,你已经澄清了很多。告诉你的老师你得到了帮助,是的,@AjayBrahmakshatriya,你是对的。通常我只在处理家庭作业时提供线索。今天,我觉得写线索比提供几行代码更重要。。。
#include <stdio.h>
void print_string(const char instring[]);
int main(void)
{
print_string("Hello World");
return 0;
}
void print_string(const char *instring)
{
const char *p = NULL;
while(*instring!='\0')
{
if (p != NULL && *instring != *p && *instring != ' ') printf("\n");
if (*instring != ' ') printf("%c",*instring);
p = instring++;
}
printf("\n");
return;
}
H
e
ll
o
W
o
r
l
d