当前位置:首页 » 编程语言 » c语言遍历char
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言遍历char

发布时间: 2022-10-04 03:06:35

A. c语言字符串遍历不到最后一个字符,求大佬们帮帮忙

你想把最后一个结束符号0也计算在z变量里,那么循环里

i++;if(s[i] == '')goto u;这两句位置颠倒一下写成:if(s[i] == '')goto u;i++;

另外,你这代码有改进的地方:

1、代码尽量不要用goto跳转,循环中想要跳出去结束整个循环,用break语句。同理想要跳过本次循环进入下一次循环,可以continue语句。

2、if else执行效率不高,特别是if判断多且字符串长的时候,这里单纯用if判断,在每个条件成立++后添加continue语句直接跳到下一次循环(下面的判断就不用判断了)。

3、结束符号也可直接用0表示。

如下代码(方法不止一种):

void StringCount(char* s)

{

int a = 0;//大写字母个数

int b = 0;//小写字母个数

int c = 0;//空格个数

int d = 0;//数字个数

int z = 0;//其他字符个数

int i=-1;

while(1)

{

++i;

if (s[i]>='A'&&s[i]<= 'Z'){a++;continue;}

if (s[i]>='a'&&s[i]<='z'){b++;continue;}

if (s[i]==' '){c++;continue;}

if (s[i]>='0'&&s[i]<='9'){d++;continue;}

z++;

if (s[i]==0)break;//这里是把结束符号也算进z,如不想算进z和z++位置颠倒

}

printf("%d %d %d %d %d",a,b,c,d,z);

}

B. C语言指针遍历

#include<stdio.h>
char*keepAlpChar(char*fromString,char*charList)
{
charList=fromSting
inti=0;
while(*fromString)
{
if(*fromString>'9'||*fromString<'0')
fromString[i++]=*fromString;
fromString++;
}
fromString[i]='';
returncharList;
}
voidmain(){
charstr[]="a12b332c443汉3232字";
charstr1[]="abc汉字";
char*keepber=keepAlpChar(str,str1);printf("==%s ",keepber);
}

C. C语言二叉树的创建和遍历

我写了一个二叉树 你给看看 一定能行的 我自己用了
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include "stdlib.h"
#define Max 20 //结点的最大个数
typedef struct BinTNode{
char data;
struct BinTNode *lchild,*rchild;
}BinTNode,*BinTree; //自定义二叉树的结点类型
//定义二叉树的指针
int NodeNum,leaf; //NodeNum为结点数,leaf为叶子数

//==========以广义表显示二叉树==============
void DisTree(BinTree T)
{
if(T)
{
printf("%c",T->data);
if((T->lchild)||(T->rchild))
{
if(T->lchild)
{
printf("%c",'(');
DisTree(T->lchild);
}
if(T->rchild)
{
printf("%c",',');
DisTree(T->rchild);
printf("%c",')');
}
}
}
}
//==========基于先序遍历算法创建二叉树==============
//=====要求输入先序序列,其中加入虚结点"#"以示空指针的位置==========
BinTree CreatBinTree(BinTree T)
{
char ch;
ch=getchar();
if(ch=='#')
T=NULL;
else
{
if(!(T=(BinTNode *)malloc(sizeof(BinTNode))))
printf("Error!");
T->data=ch;
T->lchild=CreatBinTree(T->lchild);
T->rchild=CreatBinTree(T->rchild);
}
return T;
}
//========NLR 先序遍历=============
void Preorder(BinTree T)
{
if(T)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
//========LNR 中序遍历===============
void Inorder(BinTree T)
{
if(T){
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
//==========LRN 后序遍历============
void Postorder(BinTree T)
{
if(T){
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}
//=====采用后序遍历求二叉树的深度、结点数及叶子数的递归算法========
int TreeDepth(BinTree T)
{
int hl,hr,max;
if(T){
hl=TreeDepth(T->lchild); //求左深度
hr=TreeDepth(T->rchild); //求右深度
max=hl>hr? hl:hr; //取左右深度的最大值
NodeNum=NodeNum+1; //求结点数
if(hl==0&&hr==0)
leaf=leaf+1; //若左右深度为0,即为叶子。
return(max+1);
}
else return(0);
}
//====利用"先进先出"(FIFO)队列,按层次遍历二叉树==========
void Levelorder(BinTree T)
{
int front=0,rear=1;
BinTNode *cq[Max],*p; //定义结点的指针数组cq
cq[1]=T; //根入队
while(front!=rear)
{
front=(front+1)%NodeNum;
p=cq[front]; //出队
printf("%c",p->data); //出队,输出结点的值
if(p->lchild!=NULL){
rear=(rear+1)%NodeNum;
cq[rear]=p->lchild; //左子树入队
}
if(p->rchild!=NULL){
rear=(rear+1)%NodeNum;
cq[rear]=p->rchild; //右子树入队
}
}
}
//==========主函数=================
void main()
{
BinTree T,root;
int i,depth;
printf("\n");
printf("输入完全二叉树的先序序列:"); //输入完全二叉树的先序序列,
// 用#代表虚结点,如ABD###CE##F##
root=CreatBinTree(T); //创建二叉树,返回根结点
DisTree(root);
printf("\n");
do //从菜单中选择遍历方式,输入序号。
{
printf("\t********** 菜单 ************\n");
printf("\n");
printf("\t1: 先序遍历\n");
printf("\t2: 中序遍历\n");
printf("\t3: 后序遍历\n");
printf("\t4: 该树的深度,结点数,叶子数\n");
printf("\t5: 层次遍历\n"); //按层次遍历之前,先选择4,求出该树的结点数。
printf("\t0: 退出\n");
printf("\t*******************************\n");
scanf("%d",&i);
//输入菜单序号(0-5)
switch(i)
{
case 1: {printf("Print Bin_tree Preorder: ");
Preorder(root); //先序遍历
}break;
case 2: {printf("Print Bin_Tree Inorder: ");
Inorder(root); //中序遍历
}break;
case 3: {printf("Print Bin_Tree Postorder: ");
Postorder(root); //后序遍历
}break;
case 4: {depth=TreeDepth(root); //求树的深度及叶子数
printf("树深=%d 树总结点数=%d",depth,NodeNum);
printf(" 树叶子数=%d",leaf);
}break;
case 5: {printf("LevePrint Bin_Tree: ");
Levelorder(root); //按层次遍历
}break;
default: exit(1);
}
}while(i>=0&&i<6);
}

兄弟你看看 不懂再往下留言 记得给我的劳动成果一点点奖励哦!!

D. 求教c语言中的遍历是如何在编程上实现的

如果有这么一颗树,按先序遍历是应该这样输入ABD##E##CF###; (#代表返回上一级)

E. C语言 指针数组的遍历拜托各位大神

前面说的: NULL 不要加引号 . str[i] 是一个指针 不会是 NULL , 除非str[i]指向的内存位置的地址是 NUll 或者你事先将 数组str[]中的每一个无素都初使化为 NULL ; 因为你 传入函数的参数 是一个指针数组 你可以显式的把 str[] 的长度作为参数传递到你的函数里面去 . void str(char *str1[],char *str2[],char findstr[],char returnstr[] ,int str1_len ) { int i; for(i=0; i < len ; ++i) { if(strcmp(str1[i],findstr)==0) { strcpy(returnstr,str2[i]); } } }

F. C语言遍历结构体数组

//Win32Project1.cpp:定义应用程序的入口点。
//

#include"stdafx.h"
#include"Win32Project1.h"

#defineMAX_LOADSTRING100

//全局变量:
HINSTANCEhInst; //当前实例
TCHARszTitle[MAX_LOADSTRING]; //标题栏文本
TCHARszWindowClass[MAX_LOADSTRING]; //主窗口类名

//此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCEhInstance);
BOOL InitInstance(HINSTANCE,int);
LRESULTCALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
INT_PTRCALLBACK About(HWND,UINT,WPARAM,LPARAM);

intAPIENTRY_tWinMain(_In_HINSTANCEhInstance,
_In_opt_HINSTANCEhPrevInstance,
_In_LPTSTRlpCmdLine,
_In_intnCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

//TODO:在此放置代码。
MSGmsg;
HACCELhAccelTable;

//初始化全局字符串
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_WIN32PROJECT1,szWindowClass,MAX_LOADSTRING);
MyRegisterClass(hInstance);

//执行应用程序初始化:
if(!InitInstance(hInstance,nCmdShow))
{
returnFALSE;
}

hAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_WIN32PROJECT1));

//主消息循环:
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return(int)msg.wParam;
}//
//函数:MyRegisterClass()
//
//目的:注册窗口类。
//
ATOMMyRegisterClass(HINSTANCEhInstance)
{
WNDCLASSEXwcex;

wcex.cbSize=sizeof(WNDCLASSEX);

wcex.style =CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc =WndProc;
wcex.cbClsExtra =0;
wcex.cbWndExtra =0;
wcex.hInstance =hInstance;
wcex.hIcon =LoadIcon(hInstance,MAKEINTRESOURCE(IDI_WIN32PROJECT1));
wcex.hCursor =LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName =MAKEINTRESOURCE(IDC_WIN32PROJECT1);
wcex.lpszClassName =szWindowClass;
wcex.hIconSm =LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_SMALL));

returnRegisterClassEx(&wcex);
}

//
//函数:InitInstance(HINSTANCE,int)
//
//目的:保存实例句柄并创建主窗口
//
//注释:
//
//在此函数中,我们在全局变量中保存实例句柄并
//创建和显示主程序窗口。
//
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)
{
HWNDhWnd;

hInst=hInstance;//将实例句柄存储在全局变量中

hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);

if(!hWnd)
{
returnFALSE;
}

ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

returnTRUE;
}

//
//函数:WndProc(HWND,UINT,WPARAM,LPARAM)
//
//目的:处理主窗口的消息。
//
//WM_COMMAND -处理应用程序菜单
//WM_PAINT -绘制主窗口
//WM_DESTROY -发送退出消息并返回
//
//
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;

switch(message)
{
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
//分析菜单选择:
switch(wmId)
{
caseIDM_ABOUT:
DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);
break;
caseIDM_EXIT:
DestroyWindow(hWnd);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
break;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
//TODO:在此添加任意绘图代码...
EndPaint(hWnd,&ps);
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}

//“关于”框的消息处理程序。
INT_PTRCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam)
{
UNREFERENCED_PARAMETER(lParam);
switch(message)
{
caseWM_INITDIALOG:
return(INT_PTR)TRUE;

caseWM_COMMAND:
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
{
EndDialog(hDlg,LOWORD(wParam));
return(INT_PTR)TRUE;
}
break;
}
return(INT_PTR)FALSE;
}

G. C语言遍历字符串中是否含有其中一个字符,并确认所在位置

#include<stdio.h>

intmain(){
inti,flg=1;//声明变量用flg变量来标记是否执行语句
chara[1000];
scanf("%s",a);
for(i=0;a[i]!='';i++)//如果不没有遍历到字符串末尾就继续循环
if(a[i]=='?'){//判断a[i]是否等于字符?
printf("%d",i+1);//等于的话输出它的位置
flg=0;//使flg=0到循环退出时让我们可以知道是否找到了
break;//找到了退出循环
}
if(flg==1)//如果flg等于1没有等于找到情况下的0就说明没有找到
printf("未找到");
return0;
}

你要是想学好的话,最好多看一看C语言书上关于字符串的地方。

H. 怎么用C语言遍历文件啊

三种方法可以实现:

1 按字节遍历:
逐个字节读取文件,达到遍历的效果。
int c;
while((c = fgetc(fp)) != EOF) //读取每个字节,fp为打开的文件指针。
{
//对c做一些操作。 c就是遍历中的每个字节。

}

2 按行遍历:
利用fgets,逐行读取文件进行遍历。
char buf[1024];
while(fgets(buf)) //逐行读取文件。
{
//对buf做操作,buf为每一行的数据。

}

3 将文件整个读到内存,按照字符数组进行遍历。
可以将文件整体读到内存,对内存空间进行多样化遍历,这种方式适用于文件比较小,且遍历次数较多的情况,可以提高效率。
读取文件可以采用1中的逐个字节读取的方式,存到内存空间。

I. C语言树的遍历问题

DIHGFCEBA 树的结构如下 A / B / \ D E / \ H C \ / I F \ G 这是数据结构的基础知识, 这到题目出现很多次了,分析过程也写了很多次了,由先根序列确定根节点为A,查A在中根序列的末位,即左子树为DBHIEFGC,右子树为空; 同理,再确定第二层结点为B,查B在中根序列中的位置可确定,左子树为D(叶子树结束),右子树为HIEFGC; 由右子树确定第三层,结点为E,查E在中根序列中的位置可确定,左子树为HI,右子树为FGC; 则第四层由结点E引出的左子树,结点为H,查H在中根序列中的位置可确定,可确定I在其右,右子树C左边是F,F的右边是G

J. C语言 图的遍历

思路:
以邻接表或邻接矩阵为存储结构,实现连通无向图的深度和广度优先遍历。以用户指定的结点为起始点
,分别输出每种遍历下的结点访问序列和相应的生成树的边集。
设图的结点不超过30个,每个结点用一个编号表示。通过输入图的全部边输入一个图,每个边为一个数对
可以对边的输入顺序作出某种限制。注意,生成树和生成边是有向边,端点顺序不能颠倒。