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