#Cprove 28~31 字元陣列與字串處理
- no.1 字元統計
- no.2 刪除指定字元
- no.3 情書解密
- no.4 字串處理函式
- no.5 程式設計處理C++原始碼
NO.1 字元統計
編寫一函式,由實參傳來一個字串,統計此字串中字母、數字、空格和其它字元的個數,在主函式中輸入字串以及輸出上述的結果。
程式碼
#include<stdio.h>
#include<string.h>
#include<ctype.h>
/** 字元統計函式fltj(char str[], int a[])
*統計str[]中字母、數字、空格及其他字元數目並將結果放入陣列a[]
* 輸入:str[],a[];
* 輸出:a[]
*/
void fltj(char str[], int a[])
{
int ll,i;
ll=strlen(str); //ll賦值為字串長度(真實長度,不含'\0')
for (i=0; i<ll; i++)
{
if (isalpha(str[i])) a[0]++; //統計字母個數
else if (isdigit(str[i])) a[1]++; //統計數字個數
else if (isspace(str[i])) a[2]++; //統計空格數
else a[3]++;
}
}
int main()
{
static char str[60];
static int a[4]= {0,0,0,0};
gets(str);
fltj(str,a);
printf("%s char:%d digit:%d space:%d other:%d",str,a[0],a[1],a[2],a[3]);
return 0;
}
執行結果
NO.2 刪除指定字元
有一行文字,要求刪去某一個字元。此行文字和要刪去的字元均由鍵盤輸入,要刪去的字元以字元形式輸入(如輸入a表示要刪去所有的 a字元)。
程式碼
#include<stdio.h>
int main()
{
/*str1表示原來的一行文字,str2表示刪除指定字元後的文字*/
char str1[100],str2[100];
char ch;
int i=0,k=0;
printf("please input an sentence:\n");
gets(str1);
scanf("%c",&ch);
for (i=0; str1[i]!='\0'; i++)
if (str1[i]!=ch)
{
str2[k]=str1[i];
k++;
}
str2[k]='\0';
printf("\n%s\n",str2);
return 0;
}
執行結果
NO.3 情書解密
背景:小明讓同學傳紙條給小麗。小麗接到會心一笑,大家卻不知所云。紙條上寫著My,兩人暗中約定是,真實字元為實際字元前面的第4個!My是神馬意思?推算一下,或從ASCII碼錶中查一下,自然是I love u。 (1)小明請你寫一個程式,在給小麗寫情書時,再不用費功夫自己“翻譯”,原信中每一個字元加密為其後的第4個字元。例,輸入I love u,輸出My。 (2)小麗請你寫一個程式,在看小明的情書時,讓程式幫著“解密”。因為有同學知道了他們倆人的“加密”手段,決定紙條由人傳,加密數字(1-9)用兩人約好的手勢傳,所以解密時,需要將加密數字作為程式輸入。例,輸入My(回車)4,輸出I love u (3)小剛常幫著傳紙條,想知道倆人的祕密,但不知道加密數字,於是寫了一個程式,可以列出所有可能的情況。例,輸入My,多行輸出中必然有一行是I love u。你就是小剛,寫出這個程式來吧。
程式碼一
#include<stdio.h>
#include<string.h>
#define SIZE 20
int main()
{
char ming[SIZE];
int i;
printf("XiaoMing means:\n");
gets(ming);
for(i=0;ming[i]!='\0';i++)
ming[i]+=4;
printf("XiaoMing says:\n");
puts(ming);
return 0;
}
執行結果
程式碼二
#include<stdio.h>
#include<string.h>
#define SIZE 20
int main()
{
char li[SIZE];
int i,n;
printf("XiaoLi receives:\n");
gets(li);
printf("Input encrypted number:\n");
scanf("%d",&n);
for(i=0;li[i]!='\0';i++)
li[i]-=n;
printf("XiaoLi gets:\n");
puts(li);
return 0;
}
執行結果
程式碼三
#include<stdio.h>
#include<string.h>
#define SIZE 20
int main()
{
char li[SIZE],putli[SIZE]; //也可以用putli[SIZE]={'\0'}初始化
int i,n;
memset(putli,'\0',SIZE); //初始化putli[]字元陣列
printf("XiaoLi receives:\n");
gets(li);
do
{
printf("Input encrypted number:\n");
//fflush(stdin);
scanf("%d",&n);
for(i=0; li[i]!='\0'; i++)
putli[i]=li[i]-n;
putli[i]='\0';
printf("XiaoLi gets:\n");
puts(putli);
}
while(n!=0);
return 0;
}
執行結果
小結
如果內迴圈結束沒有putli[i]='\0';
,那麼後面會跟著一堆亂碼,從而影響結果。
NO.4 字串處理函式
請編制函式,對字串的進行各種操作。
序 | 功能 | 用陣列名作形參 | 用指標作形參 |
---|---|---|---|
1 | 字串str1和str2連線,連線後的結果存放到str1中 | char *astrcat(char str1[], char str2[]) | char *pstrcat(char *str1, char *str2) |
2 | 去除字串str中的特定字元c(如空格),結果仍儲存到原字串中 | char *adelchar(char str[], char c) | char *pdelchar(char *str, char c) |
3 | 求字串str的長度並返回 | int astrlen(char str[]) | |
4 | 統計句子str中單詞的個數 | 不再重重複,做右邊的(下同) | int pwordnum(char *str) |
5 | 去除句子中第一個單詞前的空格,返回去除了空格的字串 | char *ptrim(char *str) | |
6 | 去除句子中所有多餘的空格,返回去除了空格的字串 | char *palltrim(char *str) | |
7 | 比較兩個字串,返回值同strcmp() | int pstrcmp(const char *str1, const char *str2) |
程式碼一:編制字串連線函式
/**< 編制字串連線函式 */
#include <stdio.h>
#include<string.h>
char *astrcat(char *str1, char *str2);
int main()
{
char s1[50],s2[25]; //不可直接賦值s1[50]="……",否則還要新增指標變數進行操作,因為此時s1[50]被當做常量了
strcpy(s1,"I am handsome!");
strcpy(s2,"She is so delicious!");
puts(s1);
puts(s2);
astrcat(s1,s2); //不可寫成s1=astrcat(s1,s2),因為s1是字元陣列不是指標變數,不能直接賦值,但可以寫成下面這樣
/**<
char *p1,*p2;
p1=s1;
p2=s2;
p1=astrcat(p1,p2);
*/
puts(s1);
return 0;
}
/** char *astrcat(char str1[], char str2[])
*字串str1和str2連線,連線後的結果存放到str1中
* input:str1[],str2[]
*
* return:str1[]
*/
char *astrcat(char *str1, char *str2)
{
int i=0,j=0;
while(*(str1+i)!='\0')
i++;
while(*(str2+j)!='\0')
{
*(str1+i)=*(str2+j);
j++;
i++;
}
*(str1+i)='\0';
return str1;
}
執行一
程式碼二:字串中刪除指定字元的函式(參見NO.2)
程式碼三:求字串str的長度並返回
/**< 編制求字串str的長度函式 */
#include <stdio.h>
#include<string.h>
int pstrlen(char *str);
int main()
{
char s[]="The sun shines.";
puts(s);
printf("長度為 %d\n",pstrlen(s));
return 0;
}
/** int pstrlen(char *str)
*求字串str的長度並返回
* input:char *str
* return:int n
*/
int pstrlen(char *str)
{
int n=0;
while(str[n]!='\0')
n++;
return n;
}
程式碼四:統計句子str中單詞的個數
/**< 編制統計句子str中單詞個數的函式 */
#include <stdio.h>
#include<string.h>
int pwordnum(char *str);
int main()
{
char s[]="The sun shines.";
int n;
n=pwordnum(s);
puts(s);
printf("\n單詞數:%d",n);
return 0;
}
/** int pstrlen(char *str)
*統計句子str中單詞的個數
* input:char *str
* return:int
*/
int pwordnum(char *str)
{
int n=0,i=0,word=0; //word作為是否遇到過空格的標誌,遇到置0否則為1
while(str[i]!='\0')
{
if(str[i]==' ')
word=0;
else if(word==0)
{
n++;
word=1;
}
i++;
}
return n;
}
程式碼五:去除句子中第一個單詞前的空格,返回去除了空格的字串
#include <stdio.h>
#include<string.h>
char *ptrim(char *str);
int main()
{
char s[]=" The sun shines.";
puts(s);
puts(ptrim(s));
return 0;
}
/** char *ptrim(char *str)
*去除句子中第一個單詞前的空格,返回去除了空格的字串
* input:char *str
* return:char *str
*/
char *ptrim(char *str)
{
int i=0,j=0;
while(str[i]==' ')
i++;
while(str[i]!='\0')
{
str[j++]=str[i];
i++;
}
str[j]='\0';
return str;
}
程式碼六:去除句子中所有多餘的空格,返回去除了空格的字串
#include <stdio.h>
#include<string.h>
char *palltrim(char *str);
int main()
{
char s[]=" The sun shines.";
puts(s);
puts(palltrim(s));
return 0;
}
/** char *palltrim(char *str)
*去除句子中所有多餘的空格,返回去除了空格的字串
* input:char *str
* return:char *str
*/
char *palltrim(char *str)
{
int i=0,j=0;
while(str[i]!='\0')
{
if(str[i]!=' ')
str[j++]=str[i];
i++;
}
str[j]='\0';
return str;
}
程式碼七:比較兩個字串,返回值同strcmp()
#include <stdio.h>
#include<string.h>
int pstrcmp(const char *str1, const char *str2);
int main()
{
char s1[]="The sun shines",s2[]="The sun rises";
puts(s1);
puts(s2);
printf("\n比較結果:%d",pstrcmp(s1,s2));
return 0;
}
/** int pstrcmp(const char *str1, const char *str2)
*比較兩個字串,返回值同strcmp()
* input:const char *str1, const char *str2
* return:int
*/
int pstrcmp(const char *str1, const char *str2)
{
int i=0,flag=0; //預設兩個字串相等
while(str1[i]==str2[i]&&(str1[i]!='\0'&&str2[i]!='\0'))
i++;
if(str1[i]>str2[i])
flag=1;
else if(str1[i]<str2[i])
flag=-1;
//if(str1[i]=='\0'&&str2[i]=='\0')
// flag=0;
return flag;
}
NO.5 程式設計處理C++原始碼
(1)讀入一個C程式,判斷其中是否只有一個main()函式,輸出“暫時沒有發現問題”,或者“沒有main()函式”,或者“不能定義多個main()函式”; 提示1:簡單處理,可以只比較判斷“main()”,考慮實際上的各種可能,main後面的括號中還有其他多種寫法。建議按最簡單的情形處理。 提示2:建議設計一個函式,將讀到的程式碼與字串“main()”進行比較。函式用於判斷s1是否“包含”在讀入的一行s2中,呼叫時,形參s1處的實參用“main()”即可,這樣寫提升了“抽象”級別,更容易實現,對應更高的程式碼質量。
程式碼一
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int appear(const char *s1, const char *s2);
int main()
{
int i;
char str1[200],str2[]="main()";
FILE *fp;
fp=fopen("test.c","r"); //只讀方式開啟
if(fp==NULL)
{
printf("Can not open file!");
exit(1); //exit函式包含在stdlib.h中,exit(1)表示異常退出
}
//下面此讀取為全部讀取,計算量稍大於後一種
i=0;
while(!feof(fp))
{
fscanf(fp,"%c",&str1[i]);
i++;
}
str1[i]='\0'; //可不要,因為檔案結束字元即為'\0'
/**< 迴圈讀取還可用fgets函式
while(!feof(fp))
{
fgets(str1,200,fp); //讀取一行,當讀取 (n-1) 個字元,或者讀取到換行符,或者到達檔案末尾時,它會停止,具體視情況而定。
num+=appear(str1,str2);
if(num>1) //如果str2字串出現超過1次,停止迴圈不必再讀取
break;
}
*/
fclose(fp);
printf("檔案test.c共 %d 個\"main()\"字串\n",appear(str1,str2));
return 0;
}
//定義出現次數appear()函式
int appear(const char *s1, const char *s2)
{
int i=0,k=0,flag=0,count=0;
while(s1[i]!='\0')
{
if(s1[i]==s2[0]) //首字母m對上
{
for(k=1;k<6;k++) //看後面5個字元ain()
{
if(s1[i+k]!=s2[k]) //有一個對不上標誌位置0,否則標誌位置1
{
flag=0;
break;
相關推薦
#Cprove 28~31 字元陣列與字串處理
no.1 字元統計
no.2 刪除指定字元
no.3 情書解密
no.4 字串處理函式
no.5 程式設計處理C++原始碼
NO.1 字元統計
編寫一函式,由實參傳來一個字串,統計此字串中字母、數字、空格和其它字元的個數,在主函式中輸入字串以及輸出
java字元陣列與字串相互轉換
1.字串轉化為字元陣列
public class Hello {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
String str="abc";
C語言字元陣列與字串的種種
#include<stdio.h> #include<string.h>
void printByInt(char c[], int count){
C++字元陣列與字串
C/C++語言的特性:靈活;底層;為什麼呢?大概跟陣列和指標這兩個東西有很大的關係;
作為以C++入門的人來說;我覺得有必要去把這門語言搞清楚;當然了這與我的性格有關係;
所以呢,最近會花時間將C++中的一些特性或者之前沒有搞清楚的地方重新梳理一遍;主要面對的是基礎語法方面;
單純的就語
C 字元陣列與字串的使用及加結束符'\0'的問題
2、字元陣列與字串在c語言中,將字串作為字元陣列來處理。(c++中不是)
在實際應用中人們關心的是有效字串的長度而不是字元陣列的長度,例如,定義一個字元陣列長度為100,而實際有效字元只有40個,為了測定字串的實際長度,C語言規定了一個“字串結束標誌”,以字元'\0'代表。如果有一個字串,其中第10個字元為'
c語言==字元陣列與字串,char的取值範圍(1)
求char型別陣列的strlen長度
昨天老師給了一道題目
#include <stdio.h>
#include "string.h"
int main()
{
int i;
char a[1000];
fo
c++中字元陣列與字串的轉換
1:字元陣列換為字串見程式碼#include <iostream>
#include <string>
using namespace std;
int main(){
char a[10]="aaaabbbba";
string s(&
字元型別char、字串與字元陣列、字元陣列與資料陣列區別
字元型別是以ASCII碼值運算的:小寫字母比相應的大寫字母大32,其中A=65,a=97 Esc鍵 27(十進位制)、'\x1B'(十六進位制)、'\33'(八進位制)
轉義字元:\0 空字元\n 換行\r 回車\t 水平製表符(Tab鍵)\' 單引號\" 雙引號\\ 反斜槓
char c='M';
LeetCode陣列與字串-無重複字元的最長子串
無重複字元的最長子串
給定一個字串,找出不含有重複字元的最長子串的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 無重複字元的最長子串是 "abc",其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最
C語言的字元陣列(字串)的定義與初始化
1、字元陣列的定義與初始化
字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};
即把10個字元分別賦給str[0]到str[9]10個元素
如果花
陣列與字串、字元指標與其他型別指標、賦值引數、指標引數以及引用引數、函式指標
◆陣列和字串
從表面上看,一個字串就是一個字元陣列,但在C++語句中,兩者並不完全相同。
字串是一個以串尾符"\0"結尾的字元型陣列,但任一個字元型陣列不見得必為字串(因為其中可以不包含"\0"結尾字元)。
char string1[7]="China";char string2[]="China";ch
字元、字元陣列(字串)與指向字串的指標
今天在寫一個簡單的面向連線的TCP Socket程式時(UNIX Network Programming上的時間伺服器和客戶端例子)。有個簡單的改變是將從伺服器返回的日期字串 改成一個字元一個字元的返回。
修改之前是這樣子的:
//
ticks = time(NULL);
Ruby--陣列與字串轉換及去重
1 字串轉陣列
split(",")
#字串a
a = "12,34,56"
#陣列a
a = a.split(",")
#a = ["12","34","56"]
2 陣列轉成字串
join(",")
#陣列
a = ["12","34
字元、字串、字元陣列、字串指標變數
字元和字串的區別
字元
如下,定義char,每一個字元一般情況下佔用8個位元組。
char c, ch;
字串
例如"helloworld";
注意' '和" "的區別,後者為常量字串
在C++中,有兩種型別的字串表示形式:
C-風格字
java新手:字串陣列、字元陣列和字串之間的轉換
(1)字串和字元陣列的轉化
// 字串轉化成字元陣列
String str = "abcdefg";
char[] ch = str.toCharArray();
//輸出a
System.out.println(ch[0]);
//字元陣列
C++中字元陣列與string的相互轉換
字元陣列轉化成string型別
char ch [] = “ABCDEFG”;
string str(ch);//也可string str = ch;
或者
char ch [] = “ABCDEFG”;
string str;
str = ch;//在原有基
java之字元陣列 、字串、整形之間的轉換。
轉自https://www.cnblogs.com/javacatalina/p/6641338.html
一、字元陣列轉字串
方法1
char[] str = {'a','b','d'};
StringBuffer sb = new StringBugger
js陣列與字串的相互轉換
一、陣列轉字串
需要將陣列元素用某個字元連線成字串,示例程式碼如下:
var a, b,c;
a = new Array(a,b,c,d,e);
b = a.join('-'); //a-b-c-d-e 使用-拼接陣列元素
c = a.join(''); //abc
numpy陣列與字串的轉換
陣列與字串的轉換
tostring 方法
轉化為字串:
我們可以使用不同的順序來轉換字串:
這裡使用了Fortran的格式,按照列來讀資料。
fromstring 函式
可以使用 fromstring 函式從字串中讀出資料,不過要指定型別:
此時
c#位元組陣列與字串轉換
總結歸納:如果直接從System.String類中找到方法進行字串和位元組陣列之間的轉換,是不太可能的。為了使其之間進行轉換,需要藉助另外一個型別:System.Text.Encoding。這個型別提供了將C#字串轉換成位元組陣列的方法,也提供了將C# 位元組陣列轉換成字