2017-01-11 94 views
0

爲了保持簡短,我在C++上是一個初學者,我正在學習字符序列。運行程序後沒有輸出

這是我的問題:我試圖用偶數個字母改變每個單詞到符號(#),但我認爲我正在以一種不好的方式接近這個問題。運行時我什麼也得不到。

#include<iostream> 
#include<string.h> 
using namespace std; 

int main() 
{ 
    char s[101]; 
    cin.getline(s,101); 
    int i; 
    for(int i=0; i<strlen(s); i++) 
    { 
     if(strchr(s,' ')) // searching for a space 
     {} 
     else 
      if((strlen(s)%2==0)) //trying to find if the word has an even number 
      { 
       strcat(s,"#");   // I'm sticking the # character to the word and then deleting everything after #. 
       strcpy(s+i,s+i+1); 
       cout<<s; 
      } 
      else 
       cout<<"Doens't exist"; 

    } 
    return 0; 
} 
+0

在編譯或運行? – ks1322

+0

我的不好。修正了標題。運行該程序時出現問題。 – Sharp

+1

什麼是程序輸入? – ks1322

回答

1

的代碼不列入包含COUT的唯一流是

if(strchr(s,' ')) // searching for a space 
    {} 

所以調試此。

+0

對於初學者,建議將多個打印語句放入不同的流中,以瞭解真正發生的情況與您的期望。 –

0

您的解決方案(算法)是完全錯誤的!首先你應該用空格隔開每個單詞,

if(strchr(s,' '))

然後你應該找到分隔字的長度,然後將其替換爲#。

0

看看會發生什麼,如果你輸入一個單詞的偶數字母與末尾的空間像abcd 。您的程序將搜索空間五次,每次都無所事事。

0

這裏是我想出了算法:

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    // declare input string and read it 
    string s; 
    getline(cin, s); 

    // declare vector of strings to store words, 
    // and string tmp to temporarily save word 

    vector <string> vec; 
    string tmp = ""; 

    // iterate through each character of input string 

    for(auto c : s) 
    { 
     // if there is space push the word to vector, 
     // clear tmp string 
     if (c == ' ') 
     { 
      vec.push_back(tmp); 
      tmp = ""; 
      continue; 
     } 

     // add character to temporary string 
     tmp += c; 
    } 

    // push last word to vector 
    vec.push_back(tmp); 

    // clear the input string 
    s = ""; 

    // iterate through each word 
    for(auto w : vec) 
    { 
     // if number of word's characters are odd 
     // just add the word itself 
     // otherwise add '#' symbol 
      (w.size() % 2) ? s += w : s += '#'; 
    s += ' '; 
    } 

    // remove last space 
    s.erase(s.begin() + s.size() - 1, s.begin() + s.size()); 


    cout << s; 
}