當前位置:首頁 » 編程語言 » 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個,每個結點用一個編號表示。通過輸入圖的全部邊輸入一個圖,每個邊為一個數對
可以對邊的輸入順序作出某種限制。注意,生成樹和生成邊是有向邊,端點順序不能顛倒。