Perfect World

程序设计与技术解析
本文深入探讨了程序设计的关键概念,包括类与对象、字节序处理、虚拟函数调用和const用法等核心主题。文章详细解释了类的实例化、指针操作、字节序转换以及不同函数调用的输出结果,旨在帮助读者理解C++中的底层工作原理。
1、下面程序的正确输出结果为()
class test
{
public:
	void print()
	{
		cout<<"test"<<endl;
	}
};

int main(void)
{
	test *t = new test();
	t->print();
	t = NULL;
	t->print();
	return 0;
}

A、编译不通过           B、运行时必然出错退出          C、运行时可能出错退出
D、test                    E、test  test                           F、test  随机信息  
print是一个类级别的东西,也就是说它和类的实例(或者类的对象)没有任何关系,这也就是说“并未使用this指针”,在这种情况下,print仅与test的类型有关,而不管t是什么东西,只要是类类型的指针就可以调用这个函数。
对象级别的东西,比如类中的某个非静态成员变量,这种东西和类的实例有关,因此它使用this指针。 http://topic.csdn.net/u/20120428/22/06ecf02b-45a3-41e5-8eee-2e0be73a31db.html

2、在小端字节序的机器上执行下列代码的输出为多少?

union UData
{
	unsigned char btVals[4];
	unsigned int uiVal;
};

UData d;
int main(void)
{
	d.uiVal = 0x01020408;
	unsigned int btSum = (d.btVals[0]<<5)+(d.btVals[1]<<3)+(d.btVals[2]<<1)+(d.btVals[3]<<0);
	cout<<btSum<<endl;
	return 0;
}

3、下列代码的输出为()

class CClassA
{
public:
	virtual void Print()
	{
		printf("A ");
	}
};
void PrintFunc(CClassA a)
{
	a.Print();
}

class CClassB:public CClassA
{
public:
	virtual void Print()
	{
		printf("B ");
	}
};
void PrintFunc(CClassA *pa)
{
	pa->Print();
}

int main(void)
{
	CClassB b;
	PrintFunc(b);
	PrintFunc(&b);
	return 0;
}

A、A A           B、A B    C、B  A
D、B B            E、程序无法通过编译     F、运行后程序异常终止

4、以下关于const 的用法错误的是()

A、	const int a = 10;
B、	int func(void) const
C、	const int func(void)

D、
class A
{
public:
	void SetStr(const string& str)
	{
		_str = str;
	}
private:
	string _str;
};

E、
class A
{
public:
	const string& void GetStr(void)const
	{
		return _str;
	}
private:
	string _str;
};

5、读下题

class A
{
public:
	A();
	virtual ~A();
	int a;
};

class B : public A
{
public:
	int b;
};

A *a = new B;
B* b1 = dynamic_cast<B *>(a);
B* b2 = static_cast<B *>(a);
B* b3 = reinterpret_cast<B *>(a);

假如b1的值为 0X12345678,则b2、b3可能的值为()

A、0X12345678    0X12345674

B、0X12345674    0X12345674

C、0X12345678    0X12345678

D、0X12345674    0X12345678



 


 

<think>好的,我现在需要解决用户提出的问题:统计输入中各个英文单词的出现频率,并按字母顺序输出。用户给的例子是输入一段英文句子,输出按字母排序的单词和次数。首先,我得明确需求。用户要求的是处理英文单词,所以需要将输入字符串分割成单词。然后统计每个单词出现的次数,最后按字母顺序排序输出。可能需要考虑大小写的问题,比如是否区分大小写。例如,"Hello"和"hello"是否算同一个单词。根据例子中的输出,输入是“helloworld and...”,输出是全部小写的单词,比如“again:1”,所以可能需要将单词统一转换为小写后再统计。 步骤分解: 1.输入处理:获取用户输入的字符串,可能需要去除首尾空格。2.分割单词:使用split()方法按空格分割,但要注意可能有多个空格的情况,split默认会处理。3.统一大小写:将所有单词转为小写,以确保统计时不区分大小写。4.统计频率:可以用字典来记录每个单词出现的次数。 5.排序:按字母顺序对单词进行排序,这里可能需要用sorted()函数,对字典的键进行排序。 6.输出结果:按照每行一个单词和次数的格式输出。 可能的考虑点:-是否需要处理标点符号?例如,如果输入中有“hello,”或者“world!”,是否视为单词的一部分。根据题目描述,用户只需考虑英文单词的情况,可能假设输入是纯单词,用空格分隔。但实际情况可能需要去除标点。但例子中的输入没有标点,所以可能不需要处理。但用户的问题描述中并没有明确这一点,是否需要处理?比如输入是“hello,world”会被分割成“hello,world”作为一个单词吗?这时候可能需要用正则表达式来提取单词。但根据用户提供的示例,输入是使用空格分隔的单词,没有标点,所以可能不需要处理标点。但为了更准确,可能需要处理单词中的标点,比如将标点去掉。或者题目中的“英文单词”指由字母组成的词,所以需要过滤掉非字母字符。例如,如果输入是“hello!world.”,应该统计为“hello:1”和“world:1”。这时候需要将标点符号去除。所以可能需要在分割单词后,对每个单词进行处理,去除非字母字符,或者只保留字母部分。或者使用正则表达式来匹配单词。例如,使用正则表达式re.findall(r'\b[a-zA-Z]+\b',input_string)来提取所有由字母组成的单词。但用户的问题描述中没有明确这点,但给出的示例输入中没有标点,所以是否需要处理这种情况?可能题目希望简单处理,即按空格分割,不考虑标点。但为了程序的健壮性,可能需要处理这种情况。因此,可能需要两种方法:一种是简单按空格分割,另一种是用正则表达式提取单词。根据用户示例,可能应该采用前者,但考虑到实际应用,可能后者更好。 但用户的问题描述中明确说明“只需考虑英文单词的情况”,可能意味着输入中的单词已经是正确分割的,不需要处理标点。所以可能按空格分割即可。现在,回到步骤: 输入处理:使用input().strip()获取输入,去除首尾空格。 分割单词:用split()方法,默认按任意空白字符分割,包括多个空格、制表符等。统一大小写:将每个单词转换为小写,以确保例如“Hello”和“hello”被视为同一个单词。 统计频率:使用字典,键是小写的单词,值是对应的次数。 排序:按字母顺序对字典的键进行排序,使用sorted()函数。输出:遍历排序后的键,输出每个键和对应的值,格式为“单词:次数”。现在编写代码:测试用例:输入“helloworld andpractice makesperfect andhello worldagain”,分割后的单词列表是['hello','world', 'and','practice', 'makes','perfect', 'and','hello', 'world','again']。转换为小写后,统计次数得到hello:2, world:2, and:2, practice:1, makes:1, perfect:1, again:1。按字母排序后的顺序是again, and, hello, makes, perfect, practice, world。所以输出如示例所示。 代码步骤:1.读取输入:s =input().strip()2.分割单词:words =s.split() 3.统计频率: count= {}for wordin words:lower_word= word.lower()count[lower_word] =count.get(lower_word,0)+14.排序: sorted_words= sorted(count.items()) 5.输出:for word, freqin sorted_words:print(f"{word}:{freq}") 这样就能得到正确的输出。但需要注意,这里的排序是基于单词的小写形式,而原单词的大小写在输出时会被忽略。例如,输入中的单词如果有大写,比如“Hello”,会被转为“hello”统计,输出时也是小写形式。但用户示例中的输入都是小写,所以没有问题。但用户的问题描述中可能要求输出单词的原样?比如,如果输入是“Helloworld”,输出是“Hello:1”还是“hello:1”?根据示例,用户给出的输出都是小写,例如输入中的“hello”输出为“hello:2”,所以可能需要将单词统一转为小写后再统计,但输出时保持小写形式。所以代码是正确的。 可能的问题:如果输入中有混合大小写的单词,比如“Hello hello”,会被统计为hello:2。所以代码处理是正确的。现在验证代码是否符合要求。例如,输入示例中的输入,输出是否正确?输入字符串是“helloworld andpractice makesperfect andhello worldagain”,分割后的单词列表是各个单词,转换为小写后统计次数,排序后输出顺序正确。所以,代码是正确的。 现在,针对用户的问题,给出的代码应该就是这样的。同时,需要解释每个步骤的原因,比如为什么要转换为小写,为什么使用split(),以及排序的方式等。 可能的相关问题:1.如何处理大小写混合的单词统计? 2.如何按出现次数降序排列,若次数相同则按字母顺序?3.如何排除常见的停用词(如and、the)? 4.如何处理带有标点符号的单词?</think>要统计英文单词频率并按字母顺序输出,可以通过以下步骤实现: ```python text = input().strip().lower() # 统一转换为小写 words = text.split() frequency = {} for word in words: frequency[word] = frequency.get(word, 0) + 1 for word in sorted(frequency): print(f"{word}:{frequency[word]}") ``` **实现原理**: 1. **大小写归一化**:通过`lower()`将所有单词转为小写,确保"Hello"和"hello"视为同一单词 2. **单词分割**:`split()`默认按空白符分割,正确处理连续空格、制表符等 3. **频率统计**:使用字典的`get()`方法进行安全计数 4. **字典排序**:`sorted(frequency)`按字母顺序遍历字典键 **示例验证**(输入"hello world and..."): ```text again:1 and:2 hello:2 makes:1 perfect:1 practice:1 world:2 ``` **关键特性**: - 时间复杂度O(n log n)主要来自排序操作 - 空间复杂度O(n)存储单词频率 - 严格遵循字母序排序规则(a-z)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值