输入一行字符,统计其中有多少个a,单词之间用空格隔开,如果a连续出现,则算一个。
输入一行字符,统计其中有多少个a,单词之间用空格隔开,如果a连续出现,则算一个。用数组的知识!
怎么编程??高手教下。。。。谢谢了
[解决办法]
1、遍历,找到a就计数器加1并转到2,否则转到3
2、找第一个不是a的字符,找到就转到1否则转到3
3、结束
[解决办法]
输入的字符串长度有没有限制?还有单词空格隔开是什么意思?会输入很多个字符串么?
[解决办法]
用数组知识不太明确什么概念,一行256以内这样就行:
#include <iostream>
#include <string>
int main(){
char str[256]={0};//根据需要定义字符串buff长度
std::cin.getline(str,256);
int count = 0; //有效计数
int prePos = -2;//记录a上一次出现的位置,初始化需要一个无效值,需要小于-1或者大于256
for ( int i = 0; i != strlen(str); ++i ) {
if ( str[i] == 'a' ) {
if(i-1!=prePos){//前一个如果是a那就不做计数
++count;
}
prePos = i;
}
}
return 0;
}
[解决办法]
最简单的方式就是直接遍历,可以像3楼那样,也可以用一个bool值表示是否处于'a'中,比如
for ( int i = 0; i != strlen(str); ++i ) {
if(flag&&str[i]!='a')//切换为非'a'字符
{
flag=false;
continue;
}
if(!flag&&str[i]=='a'){//进入'a'字符串中
n++;
flag=true;
}
}[解决办法]
额。。。这么说吧,思想就是,建立一个字符数组,用于存放输入的字符串。
然后字符串从头到尾遍历一遍,数有多少个字符a。
但是遍历的时候呢,有一个规则,如果当前出现的字符a前面一个还是a,那么后面这个a不计数。
所以定义了一个prePos,记录上一个a出现的位置,如果当前位置和上一个a出现的位置相邻,那么就不计数了。
如果是代码看不懂,那你要说清楚第几行不懂。
[解决办法]
int cnt = 0;
int is_a= 0;
const char *s = "abaacgax";
char *p = s;
while (*p)
{
if (*p == ‘a’ && !is_a)
{
cnt++;
is_a = 1;
}
else
{
is_a = 0;
}
}
[解决办法]
。。。这样吧,你用下面的代码。
#include <iostream>
#include <string>
int main(){
char str[256]={0};//根据需要定义字符串buff长度
std::cout << "请输入字符串,并按回车结束:" << std::endl
std::cin.getline(str,256);
int count = 0; //有效计数
int prePos = -2;//记录a上一次出现的位置,初始化需要一个无效值,需要小于-1或者大于256
for ( int i = 0; i != strlen(str); ++i ) {
if ( str[i] == 'a' ) {
if(i-1!=prePos){//前一个如果是a那就不做计数
++count;
}
prePos = i;
}
}
std::cout << "您输入的字符串里共有" << count << "个不连续的a"<<std::endl;
return 0;
}
[解决办法]
上面的少个分号,用这个
#include <iostream>
#include <string>
int main(){
char str[256]={0};//根据需要定义字符串buff长度
std::cout << "请输入字符串,并按回车结束:" << std::endl;
std::cin.getline(str,256);
int count = 0; //有效计数
int prePos = -2;//记录a上一次出现的位置,初始化需要一个无效值,需要小于-1或者大于256
for ( int i = 0; i != strlen(str); ++i ) {
if ( str[i] == 'a' ) {
if(i-1!=prePos){//前一个如果是a那就不做计数
++count;
}
prePos = i;
}
}
std::cout << "您输入的字符串里共有" << count << "个不连续的a"<<std::endl;
getchar();
return 0;
}