【发布时间】:2020-04-11 16:07:30
【问题描述】:
我必须编写一个 C 程序来输出文本的单词数,并在下一行输出以元音或辅音开头和结尾的单词。
例如:
input
La bacalaureat la proba de Informatica a fost un subiect cu un sir de caractere
output
15
bacalaureat Informatica a fost subiect sir
这是我的程序:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int c = 0;
char sir[100], copie[100];
cin.get(sir, 100);
strcpy(copie, sir);
char* pch = strtok(sir, " ");
while (pch != NULL)
{
c++;
pch = strtok(NULL, " ");
}
cout << c << endl;
char* pch2 = strtok(copie, " ");
while (pch2 != NULL)
{
if ((strchr("aeiouAEIOU", pch2[0]) && strchr("aeiouAEIOU", pch2[strlen(pch2)-1])) || (strchr("aeiouAEIOU", pch2[0] == NULL) && strchr("aeiouAEIOU", pch2[strlen(pch2)-1] == NULL)))
{
cout << pch2<<" ";
}
pch2 = strtok(NULL, " ");
}
}
但它给了我意想不到的输出。我明白了:
15
La bacalaureat la proba de Informatica a fost un subiect cu un sir de caractere
我不明白为什么。显然是因为那个 if,但我觉得没问题。
你能帮我修复我的程序吗?我不明白发生了什么。谢谢。
【问题讨论】:
-
如果你必须“写一个 C 程序”那你为什么用 C++ 并用“c++”标记问题?
-
由于您标记为 C++,因此请使用
std::string和std::cin。输入将首先跳过空格,然后读取字符,直到遇到空格。比使用字符数组容易得多。另外,std::string会动态增加;不用担心字符数组溢出或可怕的 nul 终止字符。