C语言计算字符个数

服务器君一共花费了47.717 ms进行了6次数据库查询,努力地为您提供了提供了这个页面。

下列程序用于对字符进行计数,它1.5.1的复制程序类似。

#include <stdio.h>

/* 统计输入的字符数 Version 1.0 */
main()
{
	long nc;
    
    nc = 0;
    while(getchar() != EOF)
    	++nc;
    printf("%ld\n", nc);
}

其中,语句 ++nc; 引入了一个新的运算符++,其功能是执行加 1 操作。可以用语句 nc = nc + 1 代替它,但语句++nc 更精炼一些,且通常效率也更高。与该运算符相应的是自减运算符--。++与--这两个运算符既可以作为前缀运算符(如++nc),也可以作为后缀运算符(如 nc++)。我们在后面将看到,这两种形式在表达式中具有不同的值,但++nc 与 nc++都使 nc 的值增加 1。目前,我们只使用前缀形式。

该字符计数程序使用 long 类型的变量存放计数值,而没有使用 int 类型的变量。long整型数(长整型)至少要占用 32 位存储单元。在某些机器上 int 与 long 类型的长度相同,但在一些机器上,int 类型的值可能只有 16 位存储单元的长度(最大值为 32767),这样,相当小的输入都可能使 int 类型的计数变量溢出。转换说明%ld 告诉 printf 函数其对应的参数是 long 整型。

使用 double(双精度浮点数)类型可以处理更大的数字。我们在这里不使用 while 循环语句,而用 for 循环语句来展示编写此循环的另一种方法:

#include <stdio.h>

/* count characters in input; 2nd version */
main()
{
	double nc;
	for (nc = 0; getchar() != EOF; ++nc)
	;
	printf("%.0f\n", nc);
}

对于 float 与 double 类型。printf 函数都使用%f 进行说明。%.0f 强制不打印小数点和小数部分,因此小数部分的位数为 0。

在该程序段中,for 循环语句的循环体是空的,这是因为所有工作都在测试(条件)部分与增加步长部分完成了。但 C 语言的语法规则要求 for 循环语句必须有一个循环体,因此用单独的分号代替。单独的分号称为空语句,它正好能满足 for 语句的这一要求。把它单独放在一行是为了更加醒目。

在结束讨论字符计数程序之前,我们考虑以下情况:如果输入中不包含字符,那么,在第一次调用 getchar 函数的叫候,while 语句或 for 语句中的条件测试从一开始就为假,程序的执行结果将为 0,这也是正确的结果。这一点很重要。whi1e 语句与 for 语句的优点之一就是在执行循环体之前就对条件进行测试,如果条件不满足,则不执行循环体,这就可能出现循环体一次都不执行的情况。在出现 0 长度的输入时,程序的处理应该灵活一些,在出现边界条件时,while 语句与 for 语句有助于确保程序执行合理的操作。

连接两个字符串的程序:

#include <stdio.h>
#include <string.h>
void main()
{
	int i;
	char str1[30]="welcome to ";
	char str2[]= "www.nowamagic.net";
	printf("%s\n",strcat(str1,str2));
	scanf("%d", &i);
}

在MFC下实现计算字符串的程序:

void CNowaMagic_MFCDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	//CDialogEx::OnOK();
	//获得EDIT 
	CEdit* pBoxOne; 
	pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1); 

	CString str;
	CString sStrLen; 
	char tmp[10] = "";

	pBoxOne-> GetWindowText(str); 
	int nStrLen = str.GetLength();
	sStrLen = itoa(nStrLen,tmp,10);
	CString str2 = _T("字符数为:");

	MessageBox(str2 + sStrLen,_T("程序运行结果"),MB_OK);
	str.ReleaseBuffer();
}

程序运行结果如下:

为了更好地进行程序实践,推荐使用在MFC上也把程序实践一遍,有UI出来乐趣会更大。

一些细节如下:

  • 定义 char tmp[10] = ""; 时如果不指定数组长度会造成内存越界。
  • 用 str.GetLength(); 方法获取 CString 的长度。
  • itoa(int,str,10) 可以将整数转换成字符串。int 就是要转的整数,str是存放转后的字符串,10是模式(还有其他模式)。
  • 连接两个 CString 可以直接用 + 操作符。

Creative Commons License

本文仅供自己学习与收藏之用,请勿转载,请勿用作其它用途(如商业目的等)。 原文链接:http://www.nowamagic.net/librarys/posts/c/175