我遇到了代码安静的问题,它应该将小写字母改为大写,并将多个空格转换为一个空格。所以它做错了什么,它以某种方式切断了第一个字母,就像我写“abcdefg”时它给出了输出“BCDEFG”。
main(){
int z=0,b;
while ( (b = getchar() ) != '\n')
{
b=b-32;
if (b>0)
{
putchar(b);
}
else
{
if (z>=2)
{
putchar(b);
}
else
{
z=z+1;
printf(" ");
}
}
}
}
答案 0 :(得分:0)
它似乎为我生成了所有的字母...你试过跟踪它,找出你输入的字符在每一步做什么吗?
答案 1 :(得分:0)
您的空间处理存在一些问题。
似乎你将在任何情况下打印一个空格(当你的getchar返回0x20时)。
答案 2 :(得分:0)
你可以从这开始消除你的空间问题。 否则你有一个特定的问题输入。因为我没有“首字母切”的问题。
main(){
int z=1,b;
while ( (b = getchar() ) != '\n')
{
b=b-32;
if (b>0)
{
putchar(b);
z=1;
}
else
{
if (z>=2)
{
putchar(b);
}
else
{
z=z+1;
printf(" ");
}
}
}
}
答案 3 :(得分:0)
首先,你不应该使用像“32”这样的常量,而是让系统定义值是什么。 IE:b - = char('');
其次,看看函数“islower()”和“toupper()”,C会自动为你做。
考虑这样的事情:
main() {
int flag = 0;
char b;
while ((b=getchar()) != '\n') {
if (flag && isspace(b))
continue;
putchar(toupper(b));
if (isspace(b)) {
flag = 1;
continue;
}
flag = 0;
}
putchar('\n');
}
输入:“a bc def ghijghg 123 a1b2c3”
输出:“A BC DEF GHIJGHG 123 A1B2C3”
注意:看起来文本框正在消除空格,因为输入行中有很多空格。
你应该始终了解你的边界条件。如果输入开始将是一堆空格,它仍将打印一个空格。要消除所有前导空格,请初始化flag = 1.如果输入具有尾随空格,它还将打印最终空格。要消除那些,你需要一个稍微不同的解决方案,一个在你看到空格和另一个可打印字符后打印空格的解决方案。