//設計演算法把第一個出現的鏈串'ab'改成'xyz'
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Lnode {
char data;
struct Lnode *next;
}Sq;
Sq* Create(int n) {
Sq *s, *p, *q; int i;
s = (Sq*)malloc(sizeof(Sq));
p = s;
s->next = NULL;
for (i = 0; i < n; i++) {
q = (Sq*)malloc(sizeof(Sq));
printf("請輸入第%d個數:\n", i + 1);
scanf("%s", &q->data); //%c換成%s才運行
getchar();
q->next = NULL;
p->next = q;
p = q;
}
return s;
}
//Sq* Create(char a[]){
// Sq *s,*p,*q;int i;
// s=(Sq*)malloc(sizeof(Sq));
// p=s;
// s->next=NULL;
// for(i=0;a[i]!='\0';i++){
// q=(Sq*)malloc(sizeof(Sq));
// q->data=https://bbs.csdn.net/topics/a[i];
// q->next=NULL;
// p->next=q;
// p=q;
// }
// return s;
//}
int change(Sq *s) {
Sq *p, *q;
p = s->next;
while (p) {
if (p->data == 'a'&&p->next->data == 'b') {
p->data = 'x';
p->next->data = 'y';
q = (Sq*)malloc(sizeof(Sq));
q->data = 'z';
q->next = p->next->next;
p->next->next = q;
return OK;
}
else
p = p->next;
}
if (!p) return ERROR;
}
void Print(Sq *s) {
Sq *p;
p = s->next;
while (p) {
printf("%c ", p->data);
p = p->next;
}
printf("\n");
}
void main() {
Sq *s; int n; char a[20];
printf("please enter number:\n");
scanf("%d", &n);
if (n <= 0) printf("ERROR!");
else {
s = Create(n);
// gets(a);
// s=Create(a);
printf("替換前:\n");
Print(s);
if (!change(s))
printf("沒有符合的要求!\n");
else {
printf("替換后:\n");
Print(s);
}
}
}
創建串中我的控制符是%c時無法輸出資料,%s才可以輸出,這是什么問題?
uj5u.com熱心網友回復:
Sq *s; int n; char a[20];
printf("please enter number:\n");
scanf("%d", &n);
getchar()//------這里把回車符屏蔽了------------
if (n <= 0) printf("ERROR!");
uj5u.com熱心網友回復:
請參考《C++中fflush()函式與rewind()函式》uj5u.com熱心網友回復:
'abc'沒有這樣的字符,只有"abc"這樣的字串。一個字符是一個位元組,'abc'是三個字符了。如果是判斷字串,可以考慮這樣:
typedef struct Lnode {
char data[20];
struct Lnode *next;
}Sq;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63051.html
標籤:C語言
上一篇:36進制字串的問題
下一篇:將10-20以逆二進制輸出
