从句子

时间:2017-06-04 14:44:25

标签: c++ string split

我有一句“计算机科学”作为我的输入,我想单独打印计算机和科学。我用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;
}

3 个答案:

答案 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