我有一句“计算机科学”作为我的输入,我想单独打印计算机和科学。我用c ++编写了一个程序,但它只打印“计算机”。任何人都可以帮我找出为什么它不单独打印这两个词?
int main()
{
char string[]="Computer Science";
int l;
l=strlen(string);
char begin[l];
int i=0,ind=0;
while(string[i]!='\0')
{
begin[ind]=string[i];
if(string[i]==' ')
{
begin[ind]=NULL;
cout<<begin<<"\n";
ind=0;
//ind++;
i++;
}
else
{
ind++;
i++;
}
}
return 0;
}
答案 0 :(得分:0)
您正在寻找打印输出的空间。科学在没有空间之后就没有了。 改为
while(i <= l)
将您的if条件更改为
if(string[i]==' ' || string[i] == '\0')
答案 1 :(得分:0)
Modern C ++提供了许多处理字符串的功能。这些功能旨在以更有效的方式简化处理字符串。除非必须,否则不要使用C-Style字符串。在你的情况下,你可以做
#include <iostream>
#include <string>
int main()
{
std::string str("Computer Science");
for(int i(0); i < str.size(); ++i){
if( str[i] == ' ' )
std::cout << '\n';
else{
std::cout << str[i];
}
}
std::cout << std::endl;
return 0;
}
使用C ++,你可以做更多的缩减,但我保持原样。
答案 2 :(得分:0)
可变长度数组(VLA)不是C ++的标准功能。此外,不需要再声明一个数组来输出由空格分隔的单词。
如果后面没有空格,你的程序就不会输出字符串中的第二个(或最后一个)字。
该程序包含单词中的前导空格,因为当单词之间有多个空格时,它不会跳过空格。
程序可以按照以下方式查看,如演示程序中所示。
#include <iostream>
int main()
{
char s[] = "Computer Science";
for ( const char *p = s; *p != '\0'; )
{
while ( *p == ' ' || *p == '\t' ) ++p;
if ( *p )
{
size_t i = 0;
while ( *p and not ( *p == ' ' || *p == '\t' ) )
{
++i;
++p;
}
std::cout.write( p - i, i ) << std::endl;
}
}
return 0;
}
程序输出
Computer
Science
对于条件
*p == ' ' || *p == '\t'
你可以使用lambda表达式。例如
auto is_blank = []( char c ) { return c == ' ' || c == '\t'; }
然后在循环中你可以编写例如
while ( is_blank( *p ) ) ++p;
和
while ( *p and not is_blank( *p ) )
或者您可以使用标头isspace
中声明的标准C函数<cstring>
来检查条件。
可以使用标准算法和迭代器完成任务。例如
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
int main()
{
char s[] = "Computer Science";
std::istringstream is( s );
std::copy( std::istream_iterator<std::string>( is ),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>( std::cout, "\n") );
return 0;
}
程序输出与上面的
相同Computer
Science