如何用C语言实现动态的c 动态字符串数组组

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
C语言4数组.doc 15页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
C语言4数组
你可能关注的文档:
··········
··········
1、判断字符串s1是否大于字符串s2,应当使用_____。
A. if(s1>s2)
B. if(strcmp(s1,s2))
C. if(strcmp(s2,s1)>O)
D. if(strcmp(s1,s2)>O)
教师批改:D
2、下面程序段运行结果_____。
char a[3],b[ ]="China";
printf(”%s”,a); A. 运行后将输出China
B. 运行后将输出Ch
C. 运行后将输出Chi
D. 编译出错
教师批改:D
3、在C语言中,引用数组元素时,其数组下标的数据类型允许是____。
A. 整型常量
B. 整型表达式
C. 整型常量或整型表达式
D. 任何类型的表达式
教师批改:C
4、若有说明:int a[l0];则对a效组元素的正确引用是_____。 A. a[10]
B. a[3.5]
D. a[10-10]
教师批改:D
5、在C语言中.一维数组的定义方式为;类型说明符
数组名_____。
A. [常量表达式]
B. [整型表达式]
C. [整型常量]或[整型表达式]
D. [整型常量]
教师批改:A
6、以下能对一维数组a进行正确初始化的语句是_____。 A. int a[lO]=(0,0.0,0,0);
B. int a[l0]={
C. int a[ ]={0};
D. int a[10]={10*1};
教师批改:C
7、以下对二维数组a的正确说明是_____。
A. int a[3][ ];
B. float a(3,4);
C. double a[1][4];
D. float a(3)(4);
教师批改:C
8、若有说明:int a[3][4];则对a数组元素的正确引用是_____。 A. a[2][4]
B. a[l,3]
C. a[l+l][0]
D. a(2)(1)
教师批改:C
9、若有说明:int a[3][4];则对a效组元素的非法引用是_____。
A. a[0][2*1]
B. a[l][3]
C. a[4-2][0]
D. a[0][4]
教师批改:D
10、若有说明:int a[ ][3]={1,2,3,4,5,6,7};则a数组第一维的大小是_____。 A. 2
D. 无确定值
教师批改:B
11、以下程序段的结果是_____。
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(k=0;k<3;k++)
printf{"%2d",a[k][2-k]); A. 3 5 7
教师批改:A
12、若二维数组a有m列,则在a[i][j]前的元素个数为_____。 A. j*m+i
C. i*m+j-1
D. i*m+j+1
教师批改:B
13、若有说明:int a[3][4]={0};则下面正确的叙述____。 A. 只有元素a[0][0]可以得到初值
B. 此说明语句不正确
C. 数组a中各元素都可得到初值,但其值不一定为0
D. 数组a中各元素都可得到初值0
教师批改:D
14、合法的数组定义是_____。 A.int a[]="string";
B.int a[5]={0,1,2,3,4,5};
C.char a="string";
D.char a[]={0,1,2,3,4,5};
教师批改:D
15、若有定义和语句:
char s[10];
printf("%s\n",s);
则结果是(以下μ代表空格)_____。 A.输出abcd
C.输出abcdμμμμμ
D.编译不通过
教师批改:D
16、若有以下说明和语句,则输出结果是_____。
char sp[]="\t\v\\\0will\n";
printf("%d",strlen(sp)); A.1D
D.字符串中有非法字符
教师批改:B
17、若有以下说明和语句,则输出结果是_____。
char str[]="\"c:\\abc.dat\"";
正在加载中,请稍后...c语言字符数组与字符串的使用详解_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
c语言字符数组与字符串的使用详解
&&主要内容如下:
1、字符数组的定义与初始化
2、字符数组与字符串
如:char c1[]={&#39;I&#39;,&#39; &#39;,&#39;a&#39;,&#39;m&#39;,&#39; &#39;,&#39;h&#39;,&#39;a&#39;,&#39;p&#39;,&#39;p&#39;,&#39;y&#39;};
char c2[]=&I am happy&;
sizeof(c1)与sizeof(c2)是否相同呢?strlen(c1)与strlen(c2)结果是多少?
3、字符串的表示形式,
4、对使用字符指针变量和字符数组两种方法表示字符串的讨论
5、字符串处理函数
你可能喜欢雷速体育发帖软件开发QQ千里之行 始于足下
欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 41387 人关注过本帖
标题:如何用c语言输入一个字符串,把里面连续的数字依次存放到一个数组中
等 级:新手上路
帖 子:46
结帖率:70%
&&已结贴√
&&问题点数:7&&回复次数:19&&&
如何用c语言输入一个字符串,把里面连续的数字依次存放到一个数组中
如何用c语言输入一个字符串,把里面连续的数字依次存放到一个数组中
如输入一个字符串:sd348ghi 35qeaio843ud843
则将348放在a[0],35放在a[1],843放在a[2],843放在a[3],统计有多少个整数,并输出这些整数。
void main()
char a[80],*p=a;
int b[80]={0},i=0,j=0,x=0; //!!!!
printf(&请输入一串字符\n&);
for(p=a;(*p)!='\0';p++)
if(((*p)&='0')&&((*p)&='9')) //!!!!
if(x==0) //这是什么意思,看不懂,求帮解答
b[i]=(*p)-48;
b[i-1]=b[i-1]*10+(*p)-48; //这个也看不懂
for(j=0;b[j]!=0;j++) //!!!!
printf(&%d &,b[j]);
printf(&共有%d个&,j);
printf(&\n&);
搜索更多相关主题的帖子:
来 自:神界
等 级:贵宾
威 望:367
帖 子:12723
专家分:49720
如果源代码能够正确运行并得到预期的结果&&可以研究每一句的代码含义&&否则没有研究价值
DO IT YOURSELF !
等 级:新手上路
帖 子:46
回复 2 楼 wp231957
其实我想做的是,输入一串字符串,如AB123C4D748,求输出123+4+748,并求出和,就是总做不出来,希望你能帮我一下,谢谢
来 自:神界
等 级:贵宾
威 望:367
帖 子:12723
专家分:49720
自己一点思路也没有嘛&&&这个问题不是很难 也不麻烦
DO IT YOURSELF !
等 级:新手上路
帖 子:46
回复 4 楼 wp231957
就是在把字符型‘123’转换成整型123后就不知道怎么办了,还有怎样分开123,4,748,这个没想到算法
来 自:神界
等 级:贵宾
威 望:367
帖 子:12723
专家分:49720
给你一段伪代码&&(这是最大限度了 否则大牛们又该批评我了 嘿嘿)
&&&&&&&&while(字符串指针非结束)
&&&&&&&&if(字符位于0和9之外) 指针下移
&&&&&&&&else
&&&&&&&&&&&&while(字符位于0和9之间含0和9)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& 整型数组元素=整型数组元素*10+(字符-'0');
&&&&&&&&&&&&&&& 指针下移
&&&&&&&&&&&&}
&&&&&&&&&&&&预存整型数组指针下移
DO IT YOURSELF !
等 级:新手上路
帖 子:46
回复 6 楼 wp231957
那好吧,我再想想,谢谢了
来 自:神界
等 级:贵宾
威 望:367
帖 子:12723
专家分:49720
例如:12345=((((0*10+1)*10+2)*10+3)*10+4)*10+5
DO IT YOURSELF !
等 级:版主
威 望:248
帖 子:5588
专家分:31641
以下是引用墨落成白在 08:55:50的发言:
其实我想做的是,输入一串字符串,如AB123C4D748,求输出123+4+748,并求出和,就是总做不出来,希望你能帮我一下,谢谢
只用 sscanf 也可以搞定,以下是演示代码,在gcc4.8.1(-std=c11)中编译测试通过。如果你用不支持当今C标准的编译器(例如VC)的话,自己简单修改一下代码就行。
程序代码:#include &stdio.h&
void foo( const char* str )
&&& int pos = <font color=#;
&&& sscanf( str, &%*[^0-9]%n&, &pos );
&&& const char* p = str+
&&& for( ; ; )
&&&&&&&&unsigned
&&&&&&&&pos = <font color=#;
&&&&&&&&int n = sscanf( p, &%u%*[^0-9]%n&, &val, &pos );
&&&&&&&&if( n != <font color=# )
&&&&&&&&&&&&break;
&&&&&&&&printf( &%u\n&, val );
&&&&&&&&if( pos == <font color=# )
&&&&&&&&&&&&break;
&&&&&&&&p +=
int main()
&&& foo( &AB123C4D748& );
&&& //foo( &123ABC456DEF789& );
&&& //foo( &ABC123DEF456GHI& );
&&& return <font color=#;
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
这个题目没有思路,表明不会把以前做过的简单题目综合起来运用解决相对复杂问题。
如下子问题你一定做过的:
1.循环扫描字符串
2.判断字符的类型(是否数字或字母等)
3.把一串&123&字符转换为数值
把上面那些综合起来,就能解决你的问题。这用不着什么最新语法,是非常非常非常原始的基础训练。
授人以渔,不授人以鱼。
版权所有,并保留所有权利。
Powered by , Processed in 0.040588 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言中如何用“双重循环”完成二维字符型数组的输入与输出? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。2被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答添加评论分享收藏感谢收起char a[12][12];
scanf("%d%d\n", &r, &c);
for(int i = 0; i&r; i++)
for(int j = 0; j&c; j++)
scanf("%c", &a[i][j]);
//%c后无空格
getchar();
31 条评论分享收藏感谢收起写回答字符串动态数组的C实现方法
我们知道C++是支持容器的, 对于各种数据类型都能有很好的支持,但是C不一样, C的数据类型支持真的很差,一旦换一种类型,又得重新编码,比如从int型的动态数组 转到string类型的动态数组,会发现这是件非常痛苦的事情。今天手贱,用C实现一下字符串动态数组的编写。
主要目的是:
1. 回顾一下,C中的动态内存分配方法,(主要就是malloc, realloc, free的使用), 按照我们的理解C++中的 new 本质也就是 malloc + construct, 先分配一片内存, 然后在这片内存上placement new 一个对象。
2. 体会一下接口的封装设计,指针的传递, 注意内存的分配和释放。
编码过程中遇到的两个问题,记录如下:
1.error C2275 将此类型用作表达式非法:
主要原因, C中要求变量的声明定义在区域的段首,若写到中间会报错, 而C++不存在这个问题
2. int StringInsertOneByPointer(StringArr * arr, const char * target, pStringNode pos)
函数中由于realloc函数会对指针地址修改, 若此时没有及时修正哨兵的值, 会存在错误。
下面放出源代码:
代码写的有些粗糙, 只是基本实现了功能, 还有很大的改进空间,比如搜索的时候, 我们只是从头到尾进行遍历 是O(n)的算法复杂度, 可以根据是否已经排序,设计出针对已经排序后序列的二分查找算法 O(logn)。
同样的,排序那段,我们只是简单的使用冒泡排序算法, 复杂度为 O(n^2), 可以改用快速排序 O(nlogn), 当然这些在数据量小的时候,效果不明显, 在大数据情况下,就可以看出差别了。
// =====================【字符串的数组】==================
// @ author
// @ version
// @ description
实现一个字符串的数组封装,实现增加,删除,插入,修改,排序
// =====================【字符串的数组】==================
#define SUCCESS 0
#define INPUT_ERROR -1
#define MALLOC_ERROR -2
#define NOT_FIND NULL
typedef struct _StringNode
}StringNode, *pStringN
typedef struct _StringArr
StringNode * pH
}StringArr, *pStringA
// ====================== add
========================
int StringAddOne(StringArr * arr, const char * source);
// ====================== delete =======================
int StringDeleteOne(StringArr * arr, const char * target);
// ====================== search =======================
pStringNode StringSearchFirst(StringArr * arr, const char * target);
// ====================== insert =======================
int StringInsertOneByPointer(StringArr * arr, const char * target, pStringNode pos);
int StringInsertByStr(StringArr * arr, const char * target, const char * PosPointer);
int StringInsertByID(StringArr * arr, const char * target, int id);
// ======================= modify ========================
int StringModify(StringArr * arr, const char * target, const char * source);
// ======================= sort =========================
int StringSort(StringArr * arr, int seq);
// ====================== create ========================
pStringArr StringCreate();
// ===================== destroy =======================
void StringDestroy(pStringArr parr);
// ==================== 测试用例 ======================
void main()
pStringArr pArr = StringCreate();
int ret = -1;
pStringNode pres = NOT_FIND;
// =========== insert ================
ret = StringInsertByID(pArr, &love&, 10);
ret = StringInsertByID(pArr, &new&, 0);
ret = StringInsertByStr(pArr, &hi&, &love&);
ret = StringInsertByStr(pArr, &ho&, &new&);
ret = StringInsertByStr(pArr, &hi&, &zhyh201012&);
ret = StringInsertByStr(pArr, &ho&, &ll12&);
// =========== add one ===============
ret = StringAddOne(pArr, &hello world&);
ret = StringAddOne(pArr, &zhyh2010&);
ret = StringAddOne(pArr, &zh&);
ret = StringAddOne(pArr, &hihocoder&);
ret = StringAddOne(pArr, &ustc&);
ret = StringAddOne(pArr, &china&);
ret = StringAddOne(pArr, &jp&);
// ========== search first ===========
pres = StringSearchFirst(pArr, &zhyh2010&);
pres = StringSearchFirst(pArr, &zhy&);
// ========= deleteone ===============
ret = StringDeleteOne(pArr, &hy&);
ret = StringDeleteOne(pArr, &ustc&);
ret = StringDeleteOne(pArr, &jp&);
// ========== modify ==================
ret = StringModify(pArr, &123&, &asldf&);
ret = StringModify(pArr, &zhyh2010&, &zhyh2010@ustc&);
// =========== insert ================
ret = StringInsertByID(pArr, &love&, 10);
ret = StringInsertByStr(pArr, &ho&, &china&);
ret = StringInsertByStr(pArr, &hi12&, &china&);
ret = StringInsertByStr(pArr, &ho2&, &china&);
ret = StringInsertByStr(pArr, &h3i&, &china&);
ret = StringInsertByStr(pArr, &h2o&, &china&);
// =========== sort =======================
ret = StringSort(pArr, 0);
// ========== destroy =================
StringDestroy(pArr);
// ====================== add
========================
int StringAddOne(StringArr * arr, const char * source)
if (arr == NULL || source == NULL)
return INPUT_ERROR;
// alloc memory
if (arr-&capacity &= arr-&length)
if (arr-&pHead == NULL)
// alloc space when phead == NULL
pStringNode pNode = (pStringNode)malloc(sizeof(StringNode));
if (pNode == NULL)
return MALLOC_ERROR;
arr-&pHead = pN
arr-&capacity += 1;
// realloc space
pStringNode pNode = (pStringNode)realloc(arr-&pHead, sizeof(StringNode)* 2 * arr-&capacity);
if (pNode == NULL)
return MALLOC_ERROR;
arr-&pHead = pN
arr-&capacity = 2 * arr-&
int source_len = strlen(source);
char * tmp = (char *)malloc(sizeof(char)* (source_len + 1));
if (tmp == NULL)
return MALLOC_ERROR;
//pStringNode pNode = arr-&pHead + arr-&
c2275 C不允许在中途声明变量
//StringNode * pNode = &(arr-&pHead)[arr-&length];
arr-&pHead[arr-&length].length = source_len + 1;
arr-&pHead[arr-&length].pStr =
strcpy(arr-&pHead[arr-&length].pStr, source);
arr-&length += 1;
return SUCCESS;
// ====================== delete =======================
int StringDeleteOne(StringArr * arr, const char * target)
pStringNode pres = (pStringNode)NOT_FIND;
if (arr == NULL || target == NULL)
return INPUT_ERROR;
pres = StringSearchFirst(arr, target);
if (pres == (pStringNode)NOT_FIND)
return (int)NOT_FIND;
free(pres-&pStr);
for (; pres != arr-&pHead + arr-&length - 1; pres++)
*pres = *(pres + 1);
pres-&length = 0;
pres-&pStr = NULL;
arr-&length -= 1;
return SUCCESS;
// ====================== search =======================
pStringNode StringSearchFirst(StringArr * arr, const char * target)
pStringNode pres = (pStringNode)NOT_FIND;
if (arr == NULL || target == NULL)
return (pStringNode)INPUT_ERROR;
//pStringNode pres = NOT_FIND;
for (int i = 0; i != arr-& i++)
if (strcmp(target, arr-&pHead[i].pStr) == 0)
pres = &arr-&pHead[i];
// ====================== insert =======================
int StringInsertOneByPointer(StringArr * arr, const char * target, pStringNode pos)
char * tmp = NULL;
pStringNode pOld = NOT_FIND;
if (arr == NULL || target == NULL || pos == NULL)
return INPUT_ERROR;
//assert(arr-&capacity == 0);
assert(arr-&capacity & 0);
if (arr-&capacity &= arr-&length)
pOld = arr-&pH
arr-&pHead = (pStringNode)realloc(arr-&pHead, sizeof(StringNode)* 2 * arr-&capacity);
arr-&capacity = 2 * arr-&
// 修正边界
pos += arr-&pHead - pO
// 在指针指向的位置处插入 (前叉)
tmp = (char *)malloc(sizeof(char)* (strlen(target) + 1));
if (tmp == NULL)
return MALLOC_ERROR;
for (pStringNode pres = arr-&pHead + arr-&length - 1; pres != pos - 1; pres--)
*(pres + 1) = *
pos-&pStr =
strcpy(pos-&pStr, target);
pos-&length = strlen(target) + 1;
arr-&length += 1;
return SUCCESS;
int StringInsertByStr(StringArr * arr, const char * target, const char * PosPointer)
pStringNode pres = NOT_FIND;
if (arr == NULL || target == NULL || PosPointer == NULL)
return INPUT_ERROR;
pres = StringSearchFirst(arr, PosPointer);
return StringInsertOneByPointer(arr, target, pres);
// id 从 0 开始计算
int StringInsertByID(StringArr * arr, const char * target, int id)
pStringNode pres = NOT_FIND;
if (arr == NULL || target == NULL)
return INPUT_ERROR;
if (id & 0)
if (id & arr-&length)
id = arr-&
if (arr-&length == 0)
return StringAddOne(arr, target);
pres = arr-&pHead +
return StringInsertOneByPointer(arr, target, pres);
// ======================= modify ========================
int StringModify(StringArr * arr, const char * target, const char * source)
pStringNode pres = NOT_FIND;
pStringNode tmp = NOT_FIND;
if (arr == NULL || target == NULL || source == NULL)
return INPUT_ERROR;
pres = StringSearchFirst(arr, target);
if (pres == NULL)
return (int)NOT_FIND;
tmp = (pStringNode)malloc(sizeof(char)* (strlen(source) + 1));
if (tmp == NULL)
return MALLOC_ERROR;
free(pres-&pStr);
pres-&pStr =
pres-&length = strlen(source) + 1;
strcpy(pres-&pStr, source);
return SUCCESS;
// ======================= sort =========================
int StringSort(StringArr * arr, int seq)
if (arr == NULL)
return INPUT_ERROR;
if (arr-&pHead == NULL || arr-&length == 1)
return SUCCESS;
#define MAX2MIN 1
#define MIN2MAX 0
seq = (seq & 0) ? MAX2MIN : MIN2MAX;
if (seq == MIN2MAX)
// 使用冒泡法排序
for (int i = 0; i != arr-&length - 1; i++)
for (int j = 0; j != arr-&length - 1 - j++)
if (strcmp(arr-&pHead[j].pStr, arr-&pHead[j+1].pStr) & 0)
tmp = arr-&pHead[j + 1];
arr-&pHead[j + 1] = arr-&pHead[j];
arr-&pHead[j] =
for (int i = 0; i != arr-&length - 1; i++)
for (int j = 0; j != arr-&length - 1 - j++)
if (strcmp(arr-&pHead[j].pStr, arr-&pHead[j + 1].pStr) & 0)
tmp = arr-&pHead[j + 1];
arr-&pHead[j + 1] = arr-&pHead[j];
arr-&pHead[j] =
return SUCCESS;
// ====================== create ========================
pStringArr StringCreate()
pStringArr parr = (pStringArr)malloc(sizeof(StringArr));
if (parr == NULL)
parr-&capacity = 0;
parr-&length = 0;
parr-&pHead = NULL;
// ===================== destroy =======================
void StringDestroy(pStringArr parr)
if (parr == NULL)
while (parr-&length != 0)
if (parr-&pHead[parr-&length - 1].pStr != NULL)
free(parr-&pHead[parr-&length - 1].pStr);
parr-&pHead[parr-&length - 1].length = 0;
parr-&length--;
if (parr-&pHead != NULL)
free(parr-&pHead);
free(parr);}

我要回帖

更多关于 字符串转数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信