每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
给定一个字符串,请计算其中一共包含多少个单词(假设连续的非空格字母即为一个单词)。
输入格式:
输入数据是一个长度为S(0<s<1000)的字符串,其中只包含字母和空格。< p=""></s<1000)的字符串,其中只包含字母和空格。<>
输出格式:
请输出给定字符串一共包含的单词数。
输入样例:
Welcome to NWU
输出样例:
3
解决方法:
(1)算法的基本思想:
连续的非空格字符即为一个单词,我们只需要找到单词的边界就能确定单词的个数。每个单词的开始是非空格字符,开始到末尾之间都是非空格字符,而末尾的下一个字符是空格字符或者’\0’。所以,当我们找到一个当前位置为空格字符(或’\0’),而前一个为非空格字符的位置,即找到了一个单词。
(2)代码实现:
#include
#include
using namespace std;
int countWords(string s);
int main(void)
{
string s;
cout << "请输入字符串:" << endl;
getline(cin, s);
cout << countWords(s) << endl;
return 0;
}
int countWords(string s)
{
int tag = 0; //标记上一个字符是否是字母,1表示是,0表示不是
int result = 0;
for (int i = 0; i <= s.length(); i++)
{
if (s[i] != ' ' && s[i] != '\0')
{ //当前是非空格字符
tag = 1;
}
else if (tag == 1)
{ //当前是空格字符,且前一个字符是非空格字符,即找到了一个单词
result++;
tag = 0;
}
}
return result;
}
解密——加密的算法是26个英文字母,向后移三位为密文(a加密为d…最后x->a;y->b;z->c)有大小写。输入密文,计算明文。
输入格式:
输入密文
输出格式:
输出明文输入样例:
An asdwa lijxa
输出样例:
Xk xpatx ifgux