当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

求C语言字符数据处理

更新:03-16 整理:39baobao.com
字体:

[C语言中有哪些字符串处理函数]你可以看一下头文件string.h和stdio.h里面的相关函数声明,好多好多。 这里就不一一列出了……比如下面列出的只是其中一部分…… _CRTIMP char * __cdecl strcpy(char *, con...+阅读

对字符的处理一直在c语言中占有很重要的地位。想想也是,通过键盘敲进去的都是些字符,最后还得转换成别得类型来操作。 一个很典型得代表就是将字符串转换为十进制整数得函数atof(char s[])。其中的核心就是下面这个语句 for(val = 0.0;isdigit(s[i]);i++) val = 10.0 * val + (s[i] - '0'); 从中可以看出,字符完全可以当作一般的数进行加减的操作。 还有一点很重要的就是对字符处理的技巧。一个例子:函数expand(s1,s2),将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc...xyz。该喊出可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与a-z等类似的情况。作为前导和尾随的字符原样复制。 以下是我自己编写的程序的思路: 自己的思路是先判断当前处理的字符是否为‘-’,如果不是则复制字符,是的话再分为3种情况处理,就是‘-’再字符串的位置是第一个字符,或最后一个,或者是中间。因为要求是前导和尾随的字符原样复制。 相比之下答案就显的简洁的多。一个区别就是答案的处理方式是以当前字符为基准,判断后面两个字符的情况。 while((c = s1[i++]) != '\0') if(s1[i] == '-' && s1[i+1] >= c){ i++; while(c < s1[i]) s2[j++] = c++; }else s2[j++] = c; s2[j] = '\0'; } 即当前字符不是最后一个字符,就判断后面的字符,如果为'-'且第三个字符大于第一个字符(即并非前导和后缀的情况),就逐个复制。如果不是就复制当前字符到s2【】。这样做的好处是避免了在一个分支中再出现多个分支的情况,将前导和后缀的情况也归到了直接复制的一类,使程序的逻辑清晰,可读性很强。 这说明了在设计分支程序时,要注意归纳分支的共同点,化整为零,减少分支数目可以降低复杂度和设计难度。 在编写计算器程序时,其实让我花时间最多去研究的,竟然是看似最简单的输入函数,它接受由键盘输入的字符,并存入字符数组s[]。究其原因,大概有两点: 1 接收输入的函数要判断输入的是合种字符,如:数字,字母或是小数点,原因是要和主程序中的分支程序对应起来,并不是非得这么复杂的。这说明在设计程序时必须先要有一个总体框架,否则实现起来要修改会很难。 2 增加了一个缓冲区,这可以增加程序的灵活性,上一次输入的数字可以暂时存入缓冲区。

字符串处理 1.'\0'做为结束标志但不计入长度 ASCII 0 2.不必在末尾加'\0' 3.字符串可以看作连续的一维字符数组 char *sp,s[10]; s="Hello!";不合法 s数组名为地址常量不能重新赋值 sp="Hello!";合法 4.字符串与字符数组区别 字符串包含'\0' char s[]={"abcd"}; 一维字符数组赋初值 1.赋初值

(1)用给一般数组赋初值相同 char str[10]={'a','b','c','\0'} ; 此处'\0'可以省略,因为所赋初值的字符个数少于数组的元素个数 以下定义 char str2[]={'a','b','c'}; 容易导致系统自动找一个距它最近的'\0'作为其结束标志,造成错误结果

(2)在赋初值时直接赋字符串常量 char str[10]={"string!"}; 习惯写法 char str[10]="string!"; 若定义成 char str[7]="string!" 错误 可以定义 char str[]="string!"; 在C程序执行过程中给一维字符数组赋字符串 1.不可以用赋值语句给字符数组整体赋一串字符 char mark[10] mark="C Program"不合法 mark是一个地址常量 char str1[10]="computer",str2[10]; str2=str1;不合法 2.给数组元素逐个赋字符值,最后人为加入串结束标志 char mark[10]; mark[0]='a';mark[1]='b'...mark[9]='\0'; 也可以 char mark[10];int i; for(i=0;i<9;i++) scanf("%c",&mark[i]); mark[i]='\0';

编写程序输入一个字符串删除字符串中的所有数字字符判断是否数

这个库提供了字符串处理的通用函数。 例如字符串查找、子串、模式匹配等。 当在 Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 )。 索引可以是负数,它指从字符串末尾反向解析。 即,最后一个字符在 -1 位置处,等等。

字符串库中的所有函数都在表 string 中。 它还将其设置为字符串元表的 __index 域。 因此,你可以以面向对象的形式使用字符串函数。 例如,string.byte(s,i) 可以写成 s:byte(i)。

字符串库假定采用单字节字符编码。

string.byte (s [, i [, j]])

返回字符 s[i], s[i+1], ... ,s[j] 的内部数字编码。 i 的默认值是 1 ; j 的默认值是 i。 这些索引以函数 string.sub 的规则修正。

数字编码没有必要跨平台。

string.char (···)

接收零或更多的整数。 返回和参数数量相同长度的字符串。 其中每个字符的内部编码值等于对应的参数值。

数字编码没有必要跨平台。

string.dump (function [, strip])

返回包含有以二进制方式表示的(一个 二进制代码块 )指定函数的字符串。 之后可以用 load 调用这个字符串获得 该函数的副本(但是绑定新的上值)。 如果 strip 为真值, 二进制代码块不携带该函数的调试信息 (局部变量名,行号,等等。)。

带上值的函数只保存上值的数目。 当(再次)加载时,这些上值被更新为 nil 的实例。 (你可以使用调试库按你需要的方式来序列化上值,并重载到函数中)

string.find (s, pattern [, init [, plain]])

查找第一个字符串 s 中匹配到的 pattern )。 如果找到一个匹配,find 会返回 s 中关于它起始及终点位置的索引; 否则,返回 nil。 第三个可选数字参数 init 指明从哪里开始搜索; 默认值为 1 ,同时可以是负值。 第四个可选参数 plain 为 true 时, 关闭模式匹配机制。 此时函数仅做直接的 “查找子串”的操作, 而 pattern 中没有字符被看作魔法字符。 注意,如果给定了 plain ,就必须写上 init 。

如果在模式中定义了捕获,捕获到的若干值也会在两个索引之后返回。

string.format (formatstring, ···)

返回不定数量参数的格式化版本, 格式化串为第一个参数(必须是一个字符串)。 格式化字符串遵循 ISO C 函数 sprintf 的规则。 不同点在于选项 *, h, L, l, n, p 不支持, 另外还增加了一个选项 q。 q 选项将一个字符串格式化为两个双引号括起,对内部字符做恰当的转义处理的字符串。 该字符串可以安全的被 Lua 解释器读回来。

c语言输出字符串中的数字

嗯 是这样子,我来帮你整理下这题目的思路。

首先,你发现了这个题目的关键地方,就是检查一个字符是数字还是字母

其次,你要知道一个地方,输入字符串时,C是用CHAR 这一字符型存储的,

既然是字符型,所以到时遵循的就是ASCLL码。

恩,现在我们再来了解一下ASCLL码,在ASCLL码表中,0~9所对应的是ASCLL码48~57当然,你也可以看一下ASCLL码表中其他数值代表什么字符。

for(i=32;i<=127;i++)

printf("%c ",i);

你可以同过这段代码来看下,买个数值下代表的字符是什么。

那如何检查一个字符是数字还是字母也就简单了,如果数值不是在48~57那就不是数字了~

程序的话,用二楼的就可以了~~

#include

#include

#include

main()

{

char s[100];

int n,i,j=0,a[100]={0};

gets(s);

n=strlen(s);

for(i=0;i

{

if(s[i]>=48&s[i]<=57)

{

if(j%3==0)

a[j/3+1]+=(s[i]-48)*100;

else if(j%3==1)

a[j/3+1]+=(s[i]-48)*10;

else

a[j/3+1]+=(s[i]-48);

j++;

}

}

for(i=1;i<=ceil(j/3.0);i++)

{

printf("%d ",a[i]);

if(i%2==0)

printf("\n");

}

return 0;

}

嘿嘿 不好意思了二楼的兄弟~~

java中判断一个字符串是否都为数字和截取数字

// 判断一个字符串是否都为数字

public boolean isDigit(String strNum) {

return strNum.matches("[0-9]{1,}");}

// 判断一个字符串是否都为数字

public boolean isDigit(String strNum) {

Pattern pattern = Pattern.compile("[0-9]{1,}");

Matcher matcher = pattern.matcher((CharSequence) strNum);

return matcher.matches();}//截取数字public String getNumbers(String content) {

Pattern pattern = Pattern.compile("\\d+");

Matcher matcher = pattern.matcher(content);

while (matcher.find()) {

return matcher.group(0);}return "";}

// 截取非数字

本文地址:https://www.39baobao.com/show/29_48630.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

C语言字符串处理函数其实那些字符串函数并不复杂。任何一个的实现都不出五行代码: char *strcpy( char *dst, const char *src ) { char *destination = dst; while( *dst++ = *src++ ) ; return...

一道C语言判断字符类型的问题求大神解决#include<stdio.h> int i=0,j=0,k=0,m=0,n=0; void fun(char a) { if (a>='a'&a<='z') { ++i; } else if (a>='A'&a<='Z') { ++j; } else if (a>='0'&a<='9') { ++m; } els...

c语言字符字符串问题你问的其实是C语言中字符常量和字符串常量的区别。 字符常量:在C语言中一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量。大小写字母...

C语言字符串处理首先跟LZ说一下,在比较字符串的时候就是根据字符的ASCII来比较的 无需另作ASCII来比较! #include "stdio.h" int main() { const int N=10; int i,j; char string[N],temp; prin...

C语言文本字符串处理#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> int main(int argc, char **argv) { if (argc != 2) { printf("Usage: %s filename\n", st...

c语言编程:字符串处理#include #include #include int sortArr(int *arr, int count) { int i = 0, j = 0,tmp; for (i = 0; i { for (j = i + 1; j { if (arr[i]>arr[j]) { tmp = arr[i]; arr[i...

C语言的字符串处理的求指教A错误 str未赋初值 B在x16系统下正确,部分编译器正确 C++ x32下可以写成 1 2 3 4 5 DWORDflOldProtect; HANDLEhProc = GetCurrentProcess(); VirtualProtectEx(hProc, str4,...

c语言编程字符串处理#include<stdio.h> char str1[100],str2[100]; char *mystrcat(char *s,char *ct) //字符串连接 { while(*(s++)); s--; while(*ct) *(s++) = *(ct++); return s; } char *m...

C语言字符串的处理//最笨的方法,一个个判断 //当然查找子串有更好的算法,算法设计课上会学 char * mystrstr(char *s, char *t) { char *ps, *pt; for(; *s; ++s) { ps = s; pt = t; while(*ps+...