2017-06-04 60 views
0

我有一句「計算機科學」作爲我的輸入,我想單獨打印計算機和科學。我用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

@ user4532954現在編寫一個只打印「科學」的程序。然後將這兩個程序合併到一個程序中。:) –

+0

爲什麼不使用C++,即'std :: string'和'std :: istringstream'來執行此操作? – PaulMcKenzie

回答

0

您要爲它打印輸出空間只期待。科學沒有空間後就沒有了。 變化,而到

while(i <= l) 

更改,如果條件

if(string[i]==' ' || string[i] == '\0') 
+0

[不工作(http://coliru.stacked-crooked.com/a/8e963984fb4549b1) –

+0

它沒有工作 – user4532954

+0

哦......是它不是往裏走while循環,而串[i]爲空。更新 –

0

現代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++,你可以做更多的減少,但我保持原樣。

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)) 

或者你可以使用頭<cstring>申報標準的C函數isspace來檢查條件。

該任務可以使用標準算法和迭代器完成。例如

#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