你好, 欢迎｡
在这堂课中, 我将为我们之前的挑战提供一个解决方案的演示｡
我将介绍如何使用str length函数反转字符串中的字符,
还将介绍如何使用str
compare, str copy以及冒泡算法对字符串进行排序｡
让我们来看看代码块｡
我将创建一个单独的程序｡
我在挑战中提到过, 您需要创建两个程序｡
但为了简单和演示方便, 我只创建一个｡
创建一个项目, 我将把它命名为字符串函数或类似的变量｡
让我们称之为常见的字符串函数示例｡
所以我们从相反的方向开始｡ 相反的可以继续它自己的功能, 或者我们可以把它放在主要的｡
我本来打算把它放在主干道上的｡
我首先要做的是创建一个,
我首先要做的是包含正确的头文件, 这样我就可以使用这些字符串函数, 也就是包含字符串.
h.工作人员
这里包含了所有的字符串函数｡
现在我要创建一个字符数组｡ 我要把它做成100号的｡
这只是任意的, 只是不能存储大于100的东西｡
我将创建几个局部变量来帮助我进行解析｡
我想先向用户显示一些输出｡
所以我只需要换行, 打印字符串中的单个字符,
然后反转顺序｡
这会告诉用户发生了什么, 然后打印出来, 让它更明显, 就打印出来这样的东西,
这样更容易阅读｡
输入字符串｡ 我将读入字符串｡
然后我将存储字符串｡
所以我会说scanf, 现在的s, 然后我会说str｡
我不需要传递&符号就能读进去｡
然后我会得到字符串的长度｡ 我把它放在我的局部变量l里｡
所以我可以调用str link只需要输入str length传入字符串,
它会返回字符串中的字符数｡ 非常非常容易｡
然后我会打印出一些东西来告诉他们, 字符的顺序是相反的｡
所以字符串中的字符反r反斜杠n｡
然后我会写一个很好的for循环,
遍历数组, 根据长度, 取反.
所以我要说因为I等于l｡
所以我将在字符串数组中向后返回.
我要从最后开始往前走｡
假设I大于等于0, 并且I-—｡
你会注意到, 我这样做的时候, 不需要看任何空终止字符｡
然后我将打印出遇到的每个字符｡
要打印出一个字符, 你只要做百分比c｡
这样做然后说str减I｡
基本上就是这样｡
然后我会打印出一个新行｡
实际上我会打印出一堆东西来结束它, 一堆破折号｡
让我们看看这样是否可行, 很容易这一条其实就应该是这样,
要得到这个长度应该不难｡
我忘了换行, 我们来解决一下｡
所以这里它说打印字符串反转的单个字符或输入字符串｡
现在scanf, 它只会读入｡ 所以如果我进入杰森空间的话, 费登｡
Scanf只会读到杰森和空间｡
如果你想读完整的内容, 你会想使用另一个函数, 比如f get s｡
它要做的就是把Jason打印出来的nosaj反转过来, 它做到了｡
字符串反转的字符是nosaj｡
这非常简单, 不是一个非常复杂的函数或实现｡
现在, 让我们来尝试对字符串进行排序｡
所以现在我要做点什么｡ 我想我现在要做的主要是｡
我应该把这些放在实际的函数中, 但我们这节课不是在演示函数,
我们是在演示字符串｡
我们再多创建几个我们需要的局部变量｡
主要是, 我们要创建一个名称｡
在这个例子中, 我将创建一个字符串数组｡
我们将创建一个字符串数组, 然后使用f get s｡
我将创建一个字符串数组｡ 这看起来像一个二维数组｡
所以我们现在要做的是创建25个字符串, 长度为50｡
然后我还将创建另一个25个字符串的字符串, 它将包含每个字符串｡
然后我再加两个变量｡
我要加上一个n和j｡
在我们做了反向操作之后, 我将打印出来｡
另一条消息说明我们正在使用冒泡排序对数组中的字符串进行排序｡
我不打算向您解释冒泡排序｡ 因为这只是一个算法, 与我们正在做的事情无关｡
真的, 这只是一种排序的方式｡
实际上这是最简单的一种, 因为你只需要交换.
但我们首先要知道它们要输入多少个字符串. 所以我们要输入printf,
输入字符串的个数, 然后我们要输入scanf｡
这里可以使用Scanf, 因为它只是一个数字｡
我们将输入percent d, 并将其存储在本地变量n中.
再说一次, 我知道我在这里用的名字不好,
但我在演示一些东西｡ 因为它是it's, 所以我们必须传入&符号｡
然后让他们输入字符串｡
这里我输入字符串1､ 2或3,
后面跟一个换行符｡
这将是他们必须输入的数字｡
一号, 二号, 三号｡
然后我会有一个循环, 通过它来获取输入.
这里我说I等于0,
I小于等于n, n表示要输入的字符串个数, I
++或++ I.
这里我将读取字符串, 我将用一种不同的方式来读取—我想用f get
s, 这样你就可以输入一个有空格的字符串｡
但我不认为我们需要｡
我们执行scanf, 我们要把scanf读入names数组｡
记住, 我们有name, 这是一串字符串,
基本上是25个字符｡
这50个字25个字｡
因此, 您可以输入的最大字数为25｡
所以我们要把它存储在name数组中｡
所以我们只需要说scanf｡
我们要读入一个字符串, 然后把它放在name sub
I中.
因此, 我们存储了数组, 但最多只能存储25个｡
现在我们已经完成了循环, 现在我们可以写冒泡排序了｡
所以我们的冒泡排序, 我不打算向你们解释, 我只想告诉你们, 这是一个非常简单的算法,
有一个内部循环.
所以你有一个for循环, 它遍历所有的字符串, I等于1.
然后在你的内部循环中, 你从零开始到所有的字符串减一｡
然后把第一个字符串和其他字符串进行比较｡
你基本上把它们泡下去｡
但这里重要的是str比较函数｡
让我试着在str复制函数中正确地得到这个缩进, 这才是真正重要的｡
你会注意到, 我没有任何结束括号, 因为这四个都是一个语句｡
即使这个if在它的if体中有一些东西, 这也只是一个语句｡
所以我们要把每一个单词和其他单词进行比较, 基本上是在我们之前比较过一个单词之后｡
我们说如果str比较name, sub, j和name, sub,
j, sub, 1,
那么str,
compare需要两个参数, 两个字符数组, 实际上是字符指针｡
如果它们相等, 它将返回0｡
如果第一个参数小于第二个参数, 它将返回小于零的值｡
如果第一个参数大于第二个参数, 它会返回大于0的值,
也就是1｡
这就是说如果第一个字符串大于第二个字符串, 那么我们要交换所有的字符串｡
这就是为什么我们有临时工｡
Temp实际上存储了一个临时字符串｡
我们输入临时名字sub
j, 然后用j加1的名字交换sub j.
这就是泡沫排序的工作原理｡ 同样, 这里重要的是str比较和str复制｡
为了安全起见, 你最好使用strn compare｡
而当你做strn比较的时候｡
实际上, 你并不关心字符串比较, 因为只有当你想比较前缀的时候｡
对于str copy, 您实际上想要使用strn copy｡
第三个参数是最重要的｡
所以strn
copy, 你只需要确保你复制的大小不超过temp的大小减1, 否则你会有缓冲区溢出｡
如果不是字符缓冲区,
如果是指针, 你可能会用字符串长度.
但大小将工作的罚款为这一点｡
同样, 这将消除任何缓冲区溢出｡
所以使用strn
copy和one总是比较安全的, 因为我们有null终结符, 需要放在末尾｡
这里只是strn拷贝的源目标｡
我们把名字sub j复制到temp中, 同样的, 把名字j加1和名字sub
j复制到temp中｡ 最后, 把temp转换成名字j加1｡
我必须更新这些变量, 因为它们是错误的,
因为它们必须是源变量｡ 所以在这里命名为sub｡
最后一个是j
+1, j +1.
这就是strn copy和str compare, 非常容易使用的函数｡
在对它们进行排序之后, 我们只想将它们打印出来｡
所以我们要说字符串在排序后出现, 把它放在换行符中, 然后通过一个循环打印出数组中的所有字符串｡
所以我们说4I等于0｡
I小于或等于n, 因为n表示我们排序和输入的字符串数｡
然后我们只需要检查一下字符串数组的字符串｡
所以我们要说printf s换行, 并命名为sub
I｡
所以名字sub I实际上是我们的排序数组, 这就是为什么我们有名字sub
I｡
尽管我们没有第二个因为它代表了每个字符的大小｡
25个字, 最多50个字
让我们来看看这是否有效｡
我不知道怎么拼, 所以收到了几条信息｡
如果我们运行这个｡ 我们首先运行反向函数,
这样你就可以再次看到它, 因为我们包含在同一个程序中｡
说是Fedin和idf那很好｡
输入要排序的字符串数｡
比如说5, 比如说zzzz, 这样就清楚了, 类似这样的东西｡
我在那里搞砸了一点, 但看起来它排序了它, a b d f r z｡
所以它起作用了｡ 我有一个错误,
因为输入字符串% d｡
我输入n中的字符串个数, 然后我说小于等于,
我应该说小于.
让我们再运行一次, 只是为了演示一下, 但我必须构建它｡
别忘了在你改变了事情之后再做｡
同样, 我们在这里输入任何内容, 然后输入数字字符串｡
我们就做四个吧｡
然后他们按字母顺序排列, 说d e l z, 这样看起来不错｡
所以你完全可以改进这段代码, 你可以把所有的东西都放在函数中,
让它更模块化｡ 但是我想通过这个赋值语句来了解, 如何使用str
compare, 如何使用strn copy, 以及如何使用str
length｡
你还应该尝试一下str cat,
strn cat, 这是另一个真实的常用的函数｡
您可能希望使用strstr, strchar进行搜索｡ 那些是非常非常好的或is,
upper is, lower用于检查字符, 或atoi
nad atof转换函数｡
-谢谢—谢谢 我希望这对你有帮助｡