我需要我的程序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"
答案 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 << " ";
}
}
现在,当我输入时:
another apple has fallen
输出为:
another apple
答案 1 :(得分:0)
代码中几乎没有逻辑错误:
i
,这就是无限循环的原因。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