c16---字符串
//
// main.c
// 字符串的基本概念,字符串和字符數組的共用的char[],
#include <stdio.h>int main(int argc, const char * argv[]) {// 用雙引號引起來的就是字符串printf("Hello, World!\n");// 如何定義字符串變量, 由于字符串是同一種類型的數據組成, 并且是有序的\
而數組就是用于存儲很多同一種類型的有序數據, 所以可以使用數組來保存字符串// 注意: 字符串變量和普通的字符數組有一定的區別// C語言規定, 字符串必須以\0結尾(作為字符串的結束符號), 所以字符串變量的元素個數比字符數組的元素個數多一個 \0char str[] = "lnj"; // 字符串變量 l n j \0printf("str size = %lu\n", sizeof(str));//4char charValues[] = {'l', 'n', 'j'}; // 字符數組 , 這個并不是字符串, 而是字符數組printf("charValues size = %lu\n", sizeof(charValues));//3int num = 10;float floatValue = 10.1f;double doubleValue = 9.9;char charValue = 'm';printf("%i, %f, %lf, %c\n", num, floatValue, doubleValue, charValue);//10,10.100000,9.900000,m// 內存尋址從大到小char str[] = "lnj"; // 字符串變量char str2[] = {'x', '\0' ,'m', 'g'}; // 字符數組// 如何輸出字符串變量, %s// str 數組的名稱, 數組的名稱就是數組的地址// %s的原理, 從傳入的"地址"開始逐個取出, 直到遇到"\0"位置printf("str = %s\n", str2); // x,// 字符串注意點, 字符串的初始化char str1[] = "lnj";char str2[] = {'l', 'n', 'j', '\0'};printf("str = %s\n", str2); // lnj// 部分初始化, 部分初始化中, 沒有被初始化的元素默認是0// \0對應的ASCII 0char str3[10] = {'l', 'n', 'j'}; // l n j 0000000char str4[3] = {'l', 'n', 'j'}; // 該方式不是字符串, 而是字符數組, 因為沒有\0,字符串和字符數組的共用的char[],char str5[] = {'l', 'n', 'j'}; // 錯誤寫法// 需要明白的一點就是字符串以\0結尾, 沒有\0就不是字符串// 只要是用雙引號括起來的都是字符串// 字符串的本質就是數組char str6[] = "lnj";str6[1] = 'y';printf("%s", str6);return 0;
} //
// main.c
// 字符串常用方法1
//
// Created by xiaomage on 15/6/12.
// Copyright (c) 2015年 xiaomage. All rights reserved.
//
#include <stdio.h>
#include <string.h>
int myStrlen(char str[]);
int myStrlen2(char str[], int length);int main(int argc, const char * argv[]) {// 1.如何輸出字符串// 1.1可以使用printf的%s占位符來輸出// 弊端 : 如果想要換行, 必須加上\n// 優點 : 可以自定義格式化需要輸出的字符串, 也就是可以按照我們需要的格式來輸出char str[] = "lnj";printf("name = %s!!!!\n", str);printf("-------\n");// 1.2可以使用puts函數來輸出// 優點: 可以自動換行// 缺點: 不可以自定義格式, 只能原樣輸出
puts(str);printf("-------\n");// 2.如何輸入字符// 2.1利用scanf接收字符串的注意點// scanf接收字符串, 會以空格 , tab, 回車作為結束符號, 也就是說利用scanf接收字符串時, 字符串中不能出現空格, tab, 回車printf("請輸入一個字符串\n");char buf[10];scanf("%s", buf);printf("buf = %s\n", buf);printf("-------\n");// 2.2利用gets接收字符串// warning: this program uses gets(), which is unsafe.// 如果使用gets接收字符串, 系統會提示我們正在使用一個不安全的方法接收字符// 優點: 如果利用gets接收字符串 , 可以在字符串中輸入空格, tabprintf("請輸入一個字符串\n");char buf2[10]; // lnj c
gets(buf2);printf("buf = %s\n", buf2);printf("-------\n");// 3.如何計算字符串的長度// 0123char str[] = "lnj cool"; // 3int length = sizeof(str) / sizeof(str[0]) - 1;// strlen的原理: 從傳入的地址開始逐個取出字符串, 每取出一個就讓計數器+1. 直到遇到\0為止size_t size = strlen(str); // 計算出來的結果不包括\0int size = myStrlen(str);int length = sizeof(str) / sizeof(str[0]);int size = myStrlen2(str, length);printf("length = %lu\n", size);for (int i = 0; i < size; i++) {printf("str[%i] = %c\n", i , str[i]);}return 0;
}int myStrlen2(char str[], int length)
{// 1.定義變量記錄取出了多少個字符int count = 0;// 2.遍歷字符數組for (int i = 0; i < length; i++) {if (str[i] != '\0') {count++;}}return count;
}// 自定義一個strlen函數
int myStrlen(char str[])
{// 1.定義變量記錄取出了多少個字符int count = 0;// 2.遍歷字符數組while (str[count] != '\0') {count++; // 1 2 3
}return count;
} //
// main.m
// 字符串常用方法2
//
// Created by xiaomage on 15/6/12.
// Copyright (c) 2015年 xiaomage. All rights reserved.
//
#include <stdio.h>
#include <string.h>int main(int argc, const char * argv[]) {// 1.字符串拼接// 原理 : 首先遍歷第一個字符串,直到遇到\0為止, 然后取出第二個字符串中的字符, 從\0的位置開始添加, 添加完畢之后再在最后添加一個\0char str1[7] = "lnj"; // l n j c o o l \0char str2[10] = " cool";printf("拼接前: %s\n", str1);// dest : 目標 src : 源// 將src中的數據拼接到dest后面// 注意: 要想使用字符串拼接函數, 那么dest必須是一個數組, 并且數組的長度必須大于拼接之后的長度 \如果dest數組的長度, 不能完全存放dest+src+\0, 那么就會報錯strcat(str1, str2);// char * 相當于dest const char * 相當于src size_t 需要拼接的個數// 為了避免拼接之后超出str1的存儲范圍, 那么可以動態計算str2中需要拷貝幾個到str1后面不會超出
// str1能夠存放的元素個數 - str1已經存放的個數 - \0size_t length = sizeof(str1) / sizeof(str1[0]) - strlen(str1) - 1;printf("length = %lu\n", length);strncat(str1, str2, length);printf("拼接后: %s\n", str1);// 2.字符串拷貝char str1[4] = "lnj";char str2[] = "cool";printf("拷貝前 : str1 = %s\n", str1);// char * 目標, const char * 源// strcpy函數會將源的數據拷貝到目標中, 并且會覆蓋掉目標中原有的數據// 目標的容積必須能夠存放拷貝的數據, 如果容積不夠會報錯
// strcpy(str1, str2);// char * 目標, const char * 源 size_t 需要拷貝幾個// 注意: 拷貝操作是逐個替換, 拷貝了幾個就替換幾個// str1能夠存放元素的個數 - 1是給\0留出位置int length = sizeof(str1) / sizeof(str1[0]) - 1;strncpy(str1, str2, length);printf("拷貝后 : str1 = %s\n", str1);// 3.字符串比較char str1[] = "aac"; // a achar str2[] = "abc"; // a b// strcmp它會對傳入的字符串進行比較, 比較完畢之后會返回一個整型的值給我們// 如果該值等于0,那么證明兩個字符串相等// 如果該值小于0, 那么證明str1小于str2// 如果該值大于0, 那么證明str1大于str2// strcmp的原理: 取出字符串中的每一個字符進行逐個比較, 如果發現不相等就不會繼續往下比較int res = strcmp(str1, str2);printf("res = %i\n", res);return 0;
} //
// main.m
// 字符串練習
//
#include <stdio.h>
int char_contains(char str[], int length,char key);
int char_contains2(char str[],char key);int main(int argc, const char * argv[]) {// 編寫一個函數char_contains(char str[],char key), 如果字符串str中包含字符key則返回數值1,否則返回數值0// 給你一個字符串和一個key, 要求從字符串中找出key, 如果找到就返回1沒有找到就返回0char str[] = "xiaomage";char key = 'z';int length = sizeof(str) / sizeof(str[0]);int res = char_contains(str, length, key);int res = char_contains2(str, key);printf("res = %i\n", res);return 0;
}int char_contains2(char str[],char key)
{/*xiaomage ax != a x != \0i != a i != \0a != axia zx != z x != \0i != z i != \0a != z a != \0\0 != z \0!=\0*//*// 1.定義一個變量記錄當前的索引// int index = 0;// 2.遍歷數組, 取出當前的字符判斷是否不等于key, 并且當前出去的字符不是\0while (str[index] != key && str[index] != '\0') {index++;}*/int index = -1;while (str[++index] != key && str[index] != '\0');// a != '\0'// \0 != \0
// int res = str[index] != '\0' ? 1 : 0;
// return res;return str[index] != '\0' ? 1 : 0;
}int char_contains(char str[], int length,char key)
{for (int i = 0; i < length; i++) {if (str[i] == key) {return 1;}}return 0;} //
// main.c
// 字符串數組
//
// Created by xiaomage on 15/6/12.
// Copyright (c) 2015年 xiaomage. All rights reserved.
//
#include <stdio.h>int main(int argc, const char * argv[]) {char name1[] = "lnj";char name2[] = "lmj";char name3[] = "xb";char name4[] = "lk";// 如果想存儲一堆字符串那么可以使用字符串數組// 說白了字符串數組就是二維數組char names[5][20] ={"lnj", //字符串"lmj","xb","lk","xj"}char names2[2][20] ={{'l', 'n', 'j', '\0'}, //有\0是字符串,不是字符數組,{'l', 'm', 'j', '\0'} //有\0是字符串,不是字符數組,
}return 0;
}
?
轉載于:https://www.cnblogs.com/yaowen/p/7388611.html
總結
- 上一篇: WebAPi接口安全之公钥私钥加密
- 下一篇: 性能测试-Jmeter