【发布时间】:2017-09-13 02:23:44
【问题描述】:
所以我必须写一个程序,输入是:
Spring Miles Indie Lie Ego
结果将是: 微笑
但是我的输入有一些问题。我不知道输入的长度,所以它可以是任何长度。
这就是我使用 scanf 读取每个字符的原因。我计算空格以了解要保存所需字符的数组的大小。
所以在这些之后,我的主要问题是: 如果我找到一个空格,我应该保存从 scanf 读取的下一个字符,但我该怎么做呢? 或者你们知道解决这个问题的其他方法吗?
到目前为止,这是我的代码:
int main()
{
char ch;
int i = 0, count= 0;
while(scanf("%c", &ch) != EOF)
{
if(ch == '\n')
count = 0;
if(ch == ' ')
count++;
char array[count+1];
if(ch == ' ')
array[i++] = ch + 1; // I tried this, but it doesn't work.
}
return 0;
}
【问题讨论】:
-
您必须阅读下一个字符。因为你已经知道如何阅读一个字符......我不明白问题出在哪里。
-
您必须将
array声明移出循环。按照您的方式,它将在第一次迭代时创建为一个元素为零的数组,除非字符是空格。 -
我知道了,但是如果我声明退出循环,我怎么知道大小?因为不知道要等多久。这就是为什么我使用计数器来声明数组的完美大小以保存每个空格后的第一个字符。
-
必要时分两步。您可以遍历文本、计算空格并相应地设置数组大小。但在这种情况下,由于您知道数组需要包含的所有内容,您甚至可以将其创建为
char array[6];额外元素,以便为 NULL 终止符腾出空间。 -
只是说另一种编写程序的方法就是过滤以保留大写字母。那么你就不用担心与空白相关的位置