打印以“ a”开头的单词(字符串)

时间:2018-12-23 11:58:59

标签: c++ string

我需要我的程序print以指定字母开头的单词。
假设此字母为"a"

我试图创建一种算法,但是由于循环是无限的,因此无法正常工作:

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
int main()
{
    string str;
    char slovo = 'a';
    string::size_type k = 0, pos = 0;
    cout << "Enter string" << endl;
    getline(cin,str);
    for (int i = 0; i < str.length(); i++) {
        if (str[i] == slovo) 
            while (str[i + 1] != ' ' && i < str.length()) cout << str[i];
        cout << ' ';
    }       
    return 0;
}

例如:

我输入:"another apple has fallen"
指定的字母为"a"
所需的输出:"another apple"

2 个答案:

答案 0 :(得分:2)

使用此简单示例:

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

int main()
{
    string t;
    getline(cin,t);

    istringstream iss(t);
    string word;
    while(iss >> word) {
        /* do stuff with word */
        if(word[0] == 'a')
        cout << word << " ";
    }
}

Try online

现在,当我输入时:

another apple has fallen

输出为:

another apple

答案 1 :(得分:0)

代码中几乎没有逻辑错误:

  1. while循环不会递增i,这就是无限循环的原因。
  2. 您应该在for循环中以i = 1开头,以检查初始第一个单词条件的单词开头。然后,对于其他单词,您要检查单词的第一个字符之前是否有空格,以确保算法中它是句子中的单词。

#include "iostream"
#include "string"
using namespace std;
int main()
{
    string str;
    char slovo = 'a';
    string::size_type k = 0, pos = 0;
    cout << "Enter string" << endl;
    getline(cin,str);
    for (int i = 1; i < str.length(); i++) {
        if ((str[i] == slovo && str[i-1] == ' ') || (i == 1 && str[i-1] == slovo)){
            if (i == 1) {
                cout << str[i-1];
            }
            while (str[i] != ' ' && i < str.length()) {
                cout << str[i];
                i = i + 1;
            }
            cout << endl;
        }
    }       
    return 0;
}

输出为:

Enter string
another apple has fallen 
another
apple