编程C本: 帖子 10 – 字符串在C
根本 在c输入发 我们已经熟悉如何声明, 进入和串用C简单. 在这篇文章中,我们将更多地谈论的例子, 作业链 .
1. 概观
的字符串被视为一个阵列 1 char类型的字符元素的尺寸, 数字和特殊字符,如 +, -, *, /, $, #,...
按照惯例, 的序列将由空字符被终止 (“ 0” : 注册turong).
例: 字符串“信息世界”存储如下:
2. 有些声明, 初始化字符串
我们考虑下面的例子:
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> int main() { // khai bao chuoi co toi da 50 ky tu char name[50]; printf("Hi, What is your name? \nMy name is: "); gets(name); printf("Hi %s, welcome to C language\n", name); // khoi tao chuoi ngay khi khai bao char myLove[] = "Nguyen Thi Lap Lanh"; puts(myLove); return 0; }
结果:
你好, 你叫什么名字?
我的名字是: 阮文权
嗨阮文权, 欢迎到C语言
阮氏闪耀
在程序上, 我已经使用了功能 看跌期权 打印出来的字符串MyLove麦纳, 这也是输出字符串的函数.
正如上面我们可以看到的是申报链或中链再进口报关字符串值赋给恰到好处. 但是我们不能宣布然后分配值如下:
char name[50]; name = "Nguyen Van Quan"; // error
凡要声明,然后赋值, 我们必须使用字符串复制功能 的strcpy 在图书馆 文件string.h 保存值如下:
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> #include <string.h> int main() { char name[50]; strcpy(name, "Nguyen Van Quan"); puts(name); return 0; }
3. 在C字符串的一些例子
3.1 例 1: 数字符串中的单词数
请输入字符串并计算字符串中的单词数. VD链 “阮文权” 有 3 从.
要做到这一点, 我们看到每个连续的字符扩词用空格. 因此,本文将提供给数字符串中的空格数. 如果string 1 一句话,没有空格, 字符串 2 从那里 1 之间的空间 2 从此. Ñ一般是从,将有n-1个空间.
接下来的问题是怎么算的空间? 简单, 它一直被称为第一开口字符串是字符数组, 因此,我们可以浏览文字转向检查字符链是空间. 但要浏览的字符串中的所有字符 (字符数组) 他们必须知道字符的字符串中的数字 (数组中元素的数目).
幸运的是,在图书馆 文件string.h 我们有一个函数来获取字符串的长度作为函数 strlen的. (海峡 – 串, 只 – 长度).
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> #include <string.h> // for strlen function int main() { char s[50]; printf("Enter a string: "); gets(s); int i, count = 0; // count - bien dem so luong dau cach for (i = 0; i < strlen(s); i++ ) { if(s[i] == ' ') { count++; } } printf("Number word in string is: %d\n", count + 1 ); return 0; }
很简单的代码, 你读, 了解和测试NHE.
然而,我们对音符码:
- 要表示的字符,那么我们就把撇号对, 然后我们把字符串中的引号. 如果上面的空格单引号括起来,我们可以比较 2 用这样的比较字符 2 号码, 还 2 链不能这么比较, 你可以阅读更多关于 比较字符串.
- 因为字符串是字符数组, 谨借第i个字符的字符串s,那么我们作为数组访问为s[在].
- 此示例适用较大的链长,只有当 0 并没有多余的白色标志上方, 端或字之间.
- 像上述循环, 我们的条件
i < strlen(s)
, 然而再次strlen的一个循环的自然数字符串s的字符数. 因此,如果我们直接写在每个迭代的条件, 程序必须运行命令循环的strlen计算S的字符数. 这是多余的,使程序运行长. 因此,我们将投入 1 变量是字符串的长度按照如下:
int len = strlen(s); for (i = 0; i < len; i++ ) { if(s[i] == ' ') { count++; } }
3.2 例 2: 标准化序列
请输入一个字符串,并在顶部去除所有多余的空格, 最后和字之间是否.
这个问题是软件的问题很重要, 后来当存储, 输入数据是值得注意的被标准化, 没有盈余或赤字的过程中造成的错误,并寻求.
- 字符串s的第一个字符是空格,则s[0] 空间, 我们删除它为处理完毕.
- 如果冗余即话之间的字符[在] 和s[I 1] 沿空间. 我们删除 1 在 2 是确定, 因为词语将被分离 1 空间应该保留 1 空间.
- 在结束串字符的空间,那么我们将通过指定的最后一个字符删除它是一个空字符
'\0'
完成. 请记住,最后一个字符数组n的元素a[n-1]
, 因此字符串的字符是s[ strlen(s) - 1 ]
.
接下来的问题是如何删除 1 字符串中的字符? 你看看上面的例子中,我们使用的字符串复制功能, 并删除 1 或数字字符的字符串,我们将使用此功能,但会在副本中的地址被使用.
要我删除字符到j个字符的字符串s, 我们命令 strcpy(&s[i], &s[j+1]);
. 其实质是,我们复制地址 s[j+1]
地址 s[i]
.
// e.g about string - code by nguyenvanquan7826 #include <stdio.h> #include <string.h> int main() { char s[50]; printf("Enter a string: "); gets(s); // delete all space at start of string while( s[0] == ' ' ) strcpy(&s[0], &s[1]); // delete all space at end of string while( s[ strlen(s)-1 ] == ' ') s[ strlen(s)-1 ] = '\0'; // delete all space between two word int i; for(i = 0; i < strlen(s); i++) { if( s[i] == ' ' && s[i+1] == ' ') { strcpy(&s[i], &s[i+1]); i--; // why??? } } printf("s=%s.\n", s); return 0; }
行. 您运行NHE. 回想当初输入字符串多余空间, 最后, 之间检查.
作为演习一个小问题做更多的事情,你是看代码行 i--; // why???
想想为什么这条线? 为什么我必须减少 1?
4. 在字符串和字符某些功能
测试函数符号. (在库中这些功能 文件ctype.h) 如果为真,功能不同的值 0. 如果为假,通过函数值 0.
- INT因而isalpha(诠释三) : 检查字母字符都没有.
- 诠释ISDIGIT(诠释三) : 校验位字符不是.
- 诠释islower判断(诠释三): 检查小写字符不是.
- 诠释isupper判断(诠释三): 检查大写字符不是.
- 诠释iSpace的(诠释三): 校验字符是空的 (\ñ, 空间, \吨).
该字符串处理函数. (该功能位于库 文件string.h)
- 诠释的strlen(字符* S) 返回的字符串s的长度;
- 字符* strupr(字符* S) 变化小写为大写字符串s.
- 字符* strlwr(字符* S) 更改大写改为小写.
- 的char * strcat的(字符* S1, 字符* S2) 连接串来串S1 S2;
- 诠释STRCMP(字符* S1, 字符* S2) 负值,如果字符串s1和更小的字符串s2. 而对于价格的难民正面的,如果更多的串串S1 S2. 返回的值 0 如果字符串S1与字符串s2.
- 诠释strcmpi (字符* S1, 字符* S2) 比较 2 字符串,但不区分小写和大写.
- 字符*的strcpy(字符* S1, 字符* S2) 复制串来串S1 S2.
- 字符*函数strncpy(字符* S1, 字符* S2, INTñ) 复制字符串的第n个字符S2串S1
- 字符* strnset(字符* S ,诠释三, INTñ) n次复制的字符串s的字符c.
- 字符*的strstr(字符* S1, 字符* S2) 查找字符串s2在字符串s1中出现. 如果您发现该功能的子字符串S1地址. 而相比之下,空.
- 字符* strrev(字符* S) 使用反向s.Neu成功的字符串函数来处理字符串逆转.
锻炼
- 写一个程序,给定字符串名称的独立. VD名为阮氏起泡=>分离亚麻
- 编写一个程序,规范自己的名字字符串. 首席执行官:
ha noi
=>Ha Noi
.- 写功能开关 1 字符串为小写和 1 函数转换为大写.
- 写一个程序到字符串中的字符的字符串,然后看看有多少人信 “的”.
- 写一个程序上的绳子. 检查它是否反映串? 对称是串串向后还在写像原来的字符串时. 首席执行官 水平
- 写数的程序 3 数字. 所述碑文描述了数的值. 例 123 ->一百23.
Anh ơi trong cái “焦炭hoten[50]”. 50 là số ký tự hả anh ? Em thay bằng số 2 nhưng vẫn viết nhiều hơn bình thường.
中小企业, đúng rồi, đó là giới hạn số lượng ký tự. Còn tại sao mà em gõ quá vẫn không bị thì mình cũng không rõ.
blog của a rất chi tiết và dễ hiểu. Ck感谢
A cho e xin bài tập c với ạ!! 🙂
minh muon ghep hai mang thanh mot mang minh đã dùng hàm strcpy() 但该方案没有一个图书馆出版社tring.h他们必须这样做?
您不必使用库文件string.h tring.h
如何删除字符串中的字符. 在C语言中没有删除功能,但可以通过复制下面的字符地址被删除覆盖前一个字符的地址,. 例如,我们有一个字符串HT =“阮文A”, 要删除字符“信誉”执行以下操作: 的strcpy(&HT[2],&HT[4]);
哥哥他解释户有孩子的这个地方我不明白它的副本来覆盖.
你只是要使用它DJK.
Theo mình hiểu thì cái lệnh strcpy(&HT[2],&HT[4]); sẽ copy từ địa chỉ ht[4] 为ht[ñ] 从HT地址[2] 到底. 此命令将保存的值来覆盖他的地址,, 因此它相当于删除HT[2] 和HT[3] 老. 具体在这里,它会覆盖一部分 “而从” 部分 “范Uyen”. 这样 “乌伊” 将覆盖而失去.
如果覆盖, 字符串 “而从” 覆盖串 “范Uyen” , 此字符串KO两个相等的长度,如此它不是一块串的平衡 “范Uyen” 呵呵 ???
因为我们用来复制地址, 所以它采取了一个新的地址,而不是替换字符的.
@quan: 你写的,试着用而向人们解释, 规划要明白什么是不同的鹦鹉式的教育越南.
截至上面像你商量一下.
哦,还有这条A Eķ˚FVS称为帮助:
凸轮凯撒又回来了 3 字符: 一个->X, B->, Ç>从,…, Z->在
输入:
字符串s之前解密 (0<比尔是看
在C编写代码所有家庭ËVS爵士. Ck感谢!
您浏览的每个字符, 然后重置每个字符DJK.
我的广告是有点现代螃蟹Çこ诶. 任课教师这两项议题
阿在这个系列没有你离线. 我会尽力补充.
帮助e为爵士…..^ h E现在都表示这将通过用户解决ķ先生….
推荐文章: 字母排列打印电脑, Ë应该开始向先生…
你看到了这篇文章: https://www.cachhoc.net/2013/09/03/thuat-toan-liet-ke-hoan-vi/
他对演讲主题不是他的人工智能
对不起,我没有你啊.
他说,出口这不是他的性格特点和内容检查的几个例子
不是很明白你的@@检查和出口?
对于小孩子问这句话的意思是什么,先生还是什么样的价值,它返回先生
s[strlen的(s)-1];
访问字符串s的最后一个字符.
所以我– 做什么??
为了减少变量i下降 1 单元.
在最后他做出了处理程序的例子,而无需使用他怎么???
在–; // why???
Sau khi xoá dấu cách ở vị trí i, thì dấu cách ở vị trí i + 1 lại đc chuyển vào vị trí i,
Nếu ta ko i–; thì sẽ bỏ qua dấu cách này, khiến ko xoá đc hết dấu cách thừa( 例 3 dấu cách liền nhau thì chỉ xoá đc 1 dấu cách thôi).
Em giải thích thế đúng ko a 😀
是的,你.
em van chua lam duoc bai nao hihu
您可以访问 https://chamcode.net 闪电, có hệ thống chấm đúng sai luôn 😉
他问我如何导入和打印许多不同的名称先生的数组?
你申报个char[ñ][米] 其中n是有多少人, m为最大的字符数 1 名字. 然后导入每个s[在] 一.
此示例适用较大的链长,只有当 0 并没有多余的白色标志上方, 端或字之间.
我问是的,先生在所有罪状链如发烧:”阮文机构” 有 3 从他计分方式,他的新娘只适用在白色的字与字之间的K标志
没有多余的发挥NHE.
让我问串 ” 特别自来水 ” 前后然后空白字符 “特别自来水” 获得字符是不是你
以NHE.
所以第一个字母的转移成大写自己的名字,使用任何功能,你 ?
DIY NHE, 没有可用的内容.
朝着解决宠儿 6 什么是爵士 ?
本文类似于从字所有转让. 您需要将数字分离出来, 根据他们的位置,以作出适当的阅读上.
他问我为什么使用图书馆电子 ,然后声明函数strcpy但需要机器进入电子商务strcpy_s然后进入星strcpy_s仍然先生错??谢nhieu
你用什么来代码,以便软件?
错误序列的概念, 字符串不能有我的广告的孩子!.
的字符串被视为一个阵列 1 char类型的字符元素的尺寸, 数字和特殊字符,如 +, -, *, /, $, #,...
按照惯例, 的序列将由空字符被终止 (“ 0” : 注册turong).
“nguyenvanquan7826” 没有你的链?
Code đếm từ trong xâu mà admin làm bên trên là ko hợp lý(如果输入有很多“空格”)
我已经在上面指出: “此示例适用较大的链长,只有当 0 并没有多余的白色标志上方, 在字尾或字词之间。”
我想我– 用于控制字符串中的每个单词,仅用 1 空间
因为如果您使用输入两个以上的空格,我们将不使用i– 它只是滴是 1 仅空间 :Nguyen Van Quanthì=阮文权. 我们不知道有多少人使用它们来输入I + 1,i + 2,i + 3,…我+ n所以我们用我– 为了解决问题
如何将数字字符转换为数字? ???
获取驯服角色的地址到数字字符串
fflush(标准输入); 停止输入字符到下一个字符