运行程序后没有输出

时间:2017-01-11 17:03:50

标签: c++

为了简短起见,我是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;
}

4 个答案:

答案 0 :(得分:1)

唯一不包含cout的代码流是

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

所以调试一下。

答案 1 :(得分:0)

您的解决方案(算法)完全错误!首先,你应该用空格分隔每个单词,

if(strchr(s,' ')) 

然后你应该找到分开的单词的长度,然后将其替换为#。

答案 2 :(得分:0)

如果您输入一个单词,其中包含偶数空格的单词abcd ,那么会发生什么。你的程序将搜索空间五次,每次都不做任何事情。

答案 3 :(得分: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;
}