c语言字符串数组在字符数组中怎样只能输入字母

C语言模拟试题题库
本试题来自:(2013年C语言模拟试题,)3、编程题假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是ABCDEFG******。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio. h>
#include<stdio. h>
void fun(char *a, char *p)
char s[81],*t;
printf ("Enter a string: \n ");
while (*t)
/*指针t指向字符串尾部* /
while (*t== ’*’ )
t--; /*指针t指向最后一个字母*/
fun (s, t);
printf ("The string after deleted: \n");
正确答案:有, 或者 答案解析:有,
您可能感兴趣的试题
多项选择题:()请编写函数fun(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按J顷序合并组成一个新的字符串。
例如,若字符串数组中的M个字符串为
则合并后的字符串内容应该是AAAABBBBBBBCC
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio. h>
#define M 3
#define N 20
void fun (char a [M] [N], char *b)
char w [M] [N] ="AAAA", "BBBBBBB", "CC",
char a[100]=" ####################";
printf ("The string: \n ");
for (i=0; i<M; i++)
puts (w[i]);
printf (" \n ");
fun (w, a);
printf ("The A string: \n ");
printf("%s ",a);
printf("\n\n "); 答案:有,答案解析:有,多项选择题:()请编写函数fun(),它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在 a所指的数组中,通过n返回这些数的个数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
void fun (int *a,int *n)
int aa[1000], n,
fun(aa,&n);
for(k=0;k<n;k++)
if((k+1)%10==0)
printf("%5d",aa[k]);
printf("\n");
/*一行写9个数*/
printf("%5d ",aa[k]);
答案:有,答案解析:有,
C语言模拟试题最新试卷
C语言模拟试题热门试卷c语言中怎样从字母和数字组成的字符串中提取数字?
[问题点数:120分,结帖人lazypig_l]
c语言中怎样从字母和数字组成的字符串中提取数字?
[问题点数:120分,结帖人lazypig_l]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2008年11月 Linux/Unix社区大版内专家分月排行榜第三
2009年4月 总版技术专家分月排行榜第一
2009年11月 Linux/Unix社区大版内专家分月排行榜第一2009年6月 Linux/Unix社区大版内专家分月排行榜第一2009年4月 C/C++大版内专家分月排行榜第一2009年3月 C/C++大版内专家分月排行榜第一2009年3月 Linux/Unix社区大版内专家分月排行榜第一2009年2月 Linux/Unix社区大版内专家分月排行榜第一
2008年11月 Linux/Unix社区大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。当前访客身份:游客 [
当前位置:
有一个C语言的题目,题目如下
/*  15、输入一串字符,以‘?’结束,统计各字母出现的次数,并按字母出现的多少输出 (先输出字母出现多的,次数相同的按字母表顺序输出,不出现的字母不输出)。   例:输入:5b3a+4-hdeh5dh?    & &输出: & h & &3    & & & & & & d & &2    & & & & & & a & &1    & & & & & & b & &1    & & & & & & e & &1 */
先说下我自己的思路,我自己的思路是定义一个数组放字符,再定义一个数组a[26]放字母。再定义一个数组b[26]放字母出现的次数,a,b两个数组是对应的。在排序的时候,交换b数组的时候也交换a数组。然后再输出。
最后的结果是什么都没有输出,我尝试着调试了一下,但是代码太长,很难看出问题。
我自己都觉得我的算法实在是太复杂了,代码也写了很长,所以就不贴上来了。
//下面是我在网上查的代码
int cnt[52]={0};
scanf(&%c&,&ch);
if(ch&'A' && ch&'Z') cnt[ch-'A']++;
if(ch&'a' && ch&'z') cnt[26+ch-'a']++;
}while(ch!='?');
for(i=0;i&26;i++)
printf(&%c
%d\n&,'A'+i,cnt[i]);
for(i=0;i&26;i++)
printf(&%c
%d\n&,'a'+i,cnt[26+i]);
网上的这段代码其实很好,但是它没有按照题目要求给字母排序,还有就是没有出现的字母是不需要打印的。
我尝试着改了一下,但是效果不好,希望大神能给解答一下。
下面是按照建立一个结构体所写的代码,但是代码出错。
void f12()
//输入一串字符以?结束
char str[N];
for(i=0;str[i]!='?';i++)
scanf(&%c&,str[i]);
//最后一个字符赋值为?
str[i]='?';
//全部字母小写化
for(i=0;str[i]!='?';i++)
str[i]=tolower(str[i]);
//定义一个结构体来记录字符和次数
Info a[26];
for(i=0;i&26;i++)
a[i].letter=i+97;
a[i].count=0;
//统计字符
for(i=0;str[i]!='?';i++)
if(str[i]&='a'&&str[i]&='z')
a[str[i]-'a'].count++;
for(i=0;i&26;i++)
for(j=0;j&25;j++)
if(a[j].count&a[j+1].count)
int t=a[j].
a[j].count=a[j+1].
a[j+1].count=t;
char c = a[j].
a[j].letter=a[j+1].
a[j+1].letter=c;
for(i=0;i&26;i++)
printf(&%c
%d\n&,a[i].letter,a[i].count);
共有11个答案
<span class="a_vote_num" id="a_vote_num_
根据字母确定(将字母x的次数存到x-'a'处)数组的索引,然后选择一个稳定的排序算法
<span class="a_vote_num" id="a_vote_num_
引用来自“水晶之夜”的答案引用来自“中山野鬼”的答案引用来自“NealFeng”的答案定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接
int alpha[26];
void init_alpha(void){
for (i = 0 ; i & 26 ; i ++ ) alpha[i] = 0;
#define _CHK_SET(a,min,max) do {if((a &= (min))&&(a &= (max))){alpha[a-min] += 1;}while (0)
void set_alpha(char a){
_CHK_SET(a ,'A','Z');
_CHK_SET(a,'a','z');
int max_num(void){
int re = alpha[0];
for (i = 1 ; i& 26 ; i++) {
if (alpha[i] & re) re = alpha[i];
int print_max(void){
int flag = 0;
i = max_num();
if (alpha[i] == 0){
printf(....);
alpha[i] = 0;
余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0.
哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。
我测试了你一下你这个代码,还有5个错误。不太理解。。
--------------------Configuration: temp - Win32 Debug--------------------
Compiling...
d:\my files\c program\wow\temp\temp.cpp(25) : error C2062: type 'int' unexpected
d:\my files\c program\wow\temp\temp.cpp(26) : error C2143: syntax error : missing ';' before '{'
d:\my files\c program\wow\temp\temp.cpp(33) : error C2562: 'set_alpha' : 'void' function returning a value
d:\my files\c program\wow\temp\temp.cpp(21) : see declaration of 'set_alpha'
d:\my files\c program\wow\temp\temp.cpp(35) : error C2601: 'print_max' : local function definitions are illegal
d:\my files\c program\wow\temp\temp.cpp(46) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
temp.obj - 5 error(s), 0 warning(s)
这个也算代码?我的老天啊。。。无非是我想说明逻辑,用了语言来描述。。。。不能这么省事。又不是我的作业。哈。
<span class="a_vote_num" id="a_vote_num_
引用来自“水晶之夜”的答案引用来自“中山野鬼”的答案引用来自“NealFeng”的答案定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接
int alpha[26];
void init_alpha(void){
for (i = 0 ; i & 26 ; i ++ ) alpha[i] = 0;
#define _CHK_SET(a,min,max) do {if((a &= (min))&&(a &= (max))){alpha[a-min] += 1;}while (0)
void set_alpha(char a){
_CHK_SET(a ,'A','Z');
_CHK_SET(a,'a','z');
int max_num(void){
int re = alpha[0];
for (i = 1 ; i& 26 ; i++) {
if (alpha[i] & re) re = alpha[i];
int print_max(void){
int flag = 0;
i = max_num();
if (alpha[i] == 0){
printf(....);
alpha[i] = 0;
余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0.
哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。
我测试了你一下你这个代码,还有5个错误。不太理解。。
--------------------Configuration: temp - Win32 Debug--------------------
Compiling...
d:\my files\c program\wow\temp\temp.cpp(25) : error C2062: type 'int' unexpected
d:\my files\c program\wow\temp\temp.cpp(26) : error C2143: syntax error : missing ';' before '{'
d:\my files\c program\wow\temp\temp.cpp(33) : error C2562: 'set_alpha' : 'void' function returning a value
d:\my files\c program\wow\temp\temp.cpp(21) : see declaration of 'set_alpha'
d:\my files\c program\wow\temp\temp.cpp(35) : error C2601: 'print_max' : local function definitions are illegal
d:\my files\c program\wow\temp\temp.cpp(46) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
temp.obj - 5 error(s), 0 warning(s)
他这个是 C语言写的,得用 C语言编译器。
把 .cpp 改成 .c 再试试。
还有 27 行 printf 里面加上你要输出的东西。
<span class="a_vote_num" id="a_vote_num_
引用来自“中山野鬼”的答案引用来自“NealFeng”的答案定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接
int alpha[26];
void init_alpha(void){
for (i = 0 ; i & 26 ; i ++ ) alpha[i] = 0;
#define _CHK_SET(a,min,max) do {if((a &= (min))&&(a &= (max))){alpha[a-min] += 1;}while (0)
void set_alpha(char a){
_CHK_SET(a ,'A','Z');
_CHK_SET(a,'a','z');
int max_num(void){
int re = alpha[0];
for (i = 1 ; i& 26 ; i++) {
if (alpha[i] & re) re = alpha[i];
int print_max(void){
int flag = 0;
i = max_num();
if (alpha[i] == 0){
printf(....);
alpha[i] = 0;
余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0.
哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。
简洁、明了
<span class="a_vote_num" id="a_vote_num_
引用来自“中山野鬼”的答案引用来自“NealFeng”的答案定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接
int alpha[26];
void init_alpha(void){
for (i = 0 ; i & 26 ; i ++ ) alpha[i] = 0;
#define _CHK_SET(a,min,max) do {if((a &= (min))&&(a &= (max))){alpha[a-min] += 1;}while (0)
void set_alpha(char a){
_CHK_SET(a ,'A','Z');
_CHK_SET(a,'a','z');
int max_num(void){
int re = alpha[0];
for (i = 1 ; i& 26 ; i++) {
if (alpha[i] & re) re = alpha[i];
int print_max(void){
int flag = 0;
i = max_num();
if (alpha[i] == 0){
printf(....);
alpha[i] = 0;
余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0.
哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。
我测试了你一下你这个代码,还有5个错误。不太理解。。
--------------------Configuration: temp - Win32 Debug--------------------
Compiling...
d:\my files\c program\wow\temp\temp.cpp(25) : error C2062: type 'int' unexpected
d:\my files\c program\wow\temp\temp.cpp(26) : error C2143: syntax error : missing ';' before '{'
d:\my files\c program\wow\temp\temp.cpp(33) : error C2562: 'set_alpha' : 'void' function returning a value
d:\my files\c program\wow\temp\temp.cpp(21) : see declaration of 'set_alpha'
d:\my files\c program\wow\temp\temp.cpp(35) : error C2601: 'print_max' : local function definitions are illegal
d:\my files\c program\wow\temp\temp.cpp(46) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
temp.obj - 5 error(s), 0 warning(s)
<span class="a_vote_num" id="a_vote_num_
引用来自“NealFeng”的答案定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了 哈,你这个貌似多做事情了。题目是针对字母,没针对其他分类方法。那么就可以直接
int alpha[26];
void init_alpha(void){
for (i = 0 ; i & 26 ; i ++ ) alpha[i] = 0;
#define _CHK_SET(a,min,max) do {if((a &= (min))&&(a &= (max))){alpha[a-min] += 1;}while (0)
void set_alpha(char a){
_CHK_SET(a ,'A','Z');
_CHK_SET(a,'a','z');
int max_num(void){
int re = alpha[0];
for (i = 1 ; i& 26 ; i++) {
if (alpha[i] & re) re = alpha[i];
int print_max(void){
int flag = 0;
i = max_num();
if (alpha[i] == 0){
printf(....);
alpha[i] = 0;
余下,就是初始化。然后读一个字符如果不是结束符,就掉用一次set_alpha,全部处理完就不停的调用print_max 直到返回为0.
哈, 原型设计不要考虑优化问题。逻辑清楚是关键。有什么好排序的。你排序的价值在于降低不必要的逻辑处理,但和目标逻辑没有关系。
--- 共有 1 条评论 ---
有一点挺有意思的,确实,要求是打印出来,干嘛排序呢?
(1年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
引用来自“猎户座”的答案 链表啊,结构体里放一个char来记录字母,一个int来计数,遍历字符串后排序输出。
我自己又重新调试了一下,把代码稍稍改了一下。现在基本上可以了。
void f12()
//输入一串字符以?结束
char str[N];
gets(str);
//全部字母小写化
for(i=0;str[i]!='\0';i++)
str[i]=tolower(str[i]);
//定义一个结构体来记录字符和次数
Info a[26];
for(i=0;i&26;i++)
a[i].letter=i+97;
a[i].count=0;
//统计字符
for(i=0;str[i]!='\0';i++)
if(str[i]&='a'&&str[i]&='z')
a[str[i]-'a'].count++;
for(i=0;i&26;i++)
for(j=0;j&25;j++)
if(a[j].count&a[j+1].count)
int t=a[j].
a[j].count=a[j+1].
a[j+1].count=t;
char c = a[j].
a[j].letter=a[j+1].
a[j+1].letter=c;
for(i=0;i&26;i++)
if(a[i].count==0)
printf(&%c
%d\n&,a[i].letter,a[i].count);
<span class="a_vote_num" id="a_vote_num_
Hash Table完美解决
--- 共有 1 条评论 ---
什么是Hash Table?
(1年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
链表啊,结构体里放一个char来记录字母,一个int来计数,遍历字符串后排序输出。
--- 共有 2 条评论 ---
我猜自己发现了错误,又改写了一下,现在已经成功了。
(1年前)&nbsp&
我尝试去这样做了,但是结果还是出错。有思路,但是还是比较复杂,代码写出来了出错。也不知道是哪里有问题.
(1年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
定义个数组c=int[26][2],c[0][0]='a',c[0][1]=次数,然后排序,然后输出,如果次数为0,则不输出,选个排序算法就行了
--- 共有 2 条评论 ---
: 输出的时候类型强制转换下,(char)c[0][0]。估计用指针数组也行,或者也可以用typedef定义一个struct,但这些具体怎么写语句我也不会,没怎么好好用过C,反正大体上应该是这么个意思。
(1年前)&nbsp&
这里有一个问题,你定义的数组是整形的还是字符型?你不可能一个放字符,一个放次数,它们是不同的数据类型。
(1年前)&nbsp&
有什么技术问题吗?
水晶之夜的其他问题
类似的话题【求助】输入一行字符串,输出其中所出现过的大写英文字母_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:310,383贴子:
【求助】输入一行字符串,输出其中所出现过的大写英文字母收藏
比如说输入“FONTNAME and FILENAME”
输出“F O N T A M E I L”
求吧务帮忙
下面附我自己的程序
#include&stdio.h&#include&string.h&void main(){ char
a[100],b[100];
for(j=0;j&strlen(b);j++)
{ for(i=0;i&strlen(a);i++)
{ if(a[i]&='A'&&a[i]&='Z')
b[j]=a[i]; }
代码逻辑明显明显解释不通,
1. 明显是错的,把逻辑理清楚再回来 (作业问老师去)2. 问问题的话请不要把具体的问题和代码分开,否则伸手党的帖子太多3. 别乱at吧务,都很忙的4. 输入输出的样例呢?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或C语言里如何输入几个字符串放到一个数组中_百度知道
C语言里如何输入几个字符串放到一个数组中
首先,C语言没有字符串类型,但是字符数组或者字符指针可以表示字符串。所以你可以把几个字符串分别放到几个不同数组:例如:char&str1[10]&=&&abcdefg&;char&str2[10]&=&&qwerty&;注意,定义字符数组时可以使用=直接赋值,非定义阶段,不能用等号直接对字符数组赋值,应该使用库函数strcpy例如char&str[10];strcpy(str,&abcdefg&);另外,如果非要把多个字符串输入到同一数组,可以这样:char&str[20];strcpy(str,&abcdefg&);char&*p&=&str&;p&+=&strlen(&abcdefg&);strcpy(p,&qwerty&);printf(&%s&,str);输出结果是 abcdefgqwerty
其他类似问题
为您推荐:
提问者采纳
for(i=0;1&lt.h&void main()
char s[10][80]#include &10;i++)
gets(s[i])
提问者评价
您可能关注的推广回答者:
字符串的相关知识
其他1条回答
i & 10; i++)
gets(s[i])for (i = 0
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言二维字符串数组 的文章

 

随机推荐