问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言简单问题求解???

发布网友 发布时间:2022-07-19 19:23

我来回答

2个回答

好二三四 时间:2022-08-14 03:40

chars可以是一个名词,意思是烧焦物、【木】木炭,也可以作动词,意思是(使)烧黑、烧焦、当家庭清洁工,这个单词可以划分为几个音节呢?我们一起来看一看,这个单词一共只有一个音节,第一个音节里面的字母组合ar的发音为【a:】,辅音字母组合ch的发音为【t?】,字母s的发音为【z】,所以合在一起的话这个单词的发音就是【t?a:z】;

我们再看一下用法,chars可以是一个名词,意思是烧焦物、【木】木炭,也可以作动词,是动词原形char的三单形式,作为烧成碳、烧焦、当打杂女工的意思来使用,例如在下面这几个句子里,Please char this octopus,请你把这只章鱼烤焦,在这个句子中,chars作动词、指的是烧焦,The Chinese chars can be used to make this material,中国的木炭可以用来制作这种材料,在这个句子中,chars作名词,指的是木炭,chars这个单词你学会了吗?

热心网友 时间:2024-11-25 04:25

你的程序if(*string != *chars++)
每次比较string和chars指针的内容时,都会将chars指针指向下一个字符。无论字符是不是相等都会++。如果两个字符串的第一个字符恰好相等,代码看上去就会没有问题。如果第一个字符不同,比如你的“123”和“23”。你只是将chars指向了下一个‘3’,一直到chars指向‘\0’,就退出了最内层的循环。在接下来比较m和n时,if(m!=0&&m==n)也不会满足,因此你就讲m、n、chars都重新赋值了。接下来还是比较字符串“123”和“12”是不是相同。

程序进入了死循环......

建议练习的时候用Visual Studio或者VC++ 6.0
可以设置断点单步调试。方便分析。
希望对你有帮助。

热心网友 时间:2024-11-25 04:25

第二个while是错的,简单的字符串匹配(暴力法)通常是:

两个循环,外层移动文本指针,内层做模式比对,整个算法复杂度为O(m*n),m为文本长度,n为模式长度。


你代码的主要问题在于:
    1. 内层循环中string和chars没有“回退”

    2. 内层循环应该有break,即——两字符串的前缀不匹配,那么他们两者一定不匹配


应该改成:

while(*string!=null)
{
while(chars[n] != null)//通过计算匹配程度m和字符串字数n来判断是否存在
{
if(string[n] == chars[n])
m++; // m for matched count.
else
{
m = 0;
n = 0; 
break;
}
n++; // for pattern scaned count.
}
if(chars[n] == '\0') break; 
// '\0' 是字符串最后一个字符,所以
// 这里的 chars[n] == '\0' 相当于 n == strlen(chars),但比后者要快

string++;
}
if(m > 0)
printf("find it!\n");
else
printf("fail to find it!\n");


或者改成(改动最小):

while(*string!=null)
{
while(*chars != null)
{
if(*chars != *string)
{
string -= m;
chars -= m;
m = 0; // reset match count.
break;
}
else // a char match!
{
m++;  // count a match.
}
string++; 
chars++;
}
if(chars[m] == '\0') break; 
string++;
}
if(m > 0)
printf("find it!\n");
else
printf("fail to find it!\n");

两种改法一样,都是暴力法。

关于字符串匹配,《Algorithm》一书讲解的较为细致,楼主可自行查阅。


如果没有特殊要求,可以用C库<string.h>里提供的strstr函数:

char * strstr ( const char *, const char * ); // 返回匹配位置,或NULL(匹配失败)

也可以用C++库std::string的成员函数find,返回匹配下标,或者std::string::npos(匹配失败)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 唱鸭为什么注册失败 电脑网页字体大小怎么调 电脑网页调字体大小的方法 我是应届毕业生,建筑设计,深圳华艺和奥意,应该选哪一家呢,希望可以从发展前景方面谈一下,不胜感激? 汉川火车站晚上8点还有公交吗? 汉川7路公交车路线 汉川公交车的时刻表,7路公交的时刻表。急! 一年级下册必背古诗赏析春晓,你教会孩子了吗? 如何安全使用电动滑板车 什么时候吃中药为宜 荆芥的禁忌 江苏省高考2010第一批招生本科院校 2011年安徽工业大学在哪些省份进入一本招生 安徽财经大学今年在哪些省份进入一本招生 安徽医学高等专科学校在江苏招生吗 在江苏本一招生的安徽高校? 谁看过赵雅芝叶童演的《新孽海花传奇》?里面那个叫碧玉的人是谁演的??? 神捕之碾玉观音的基本资料 电视剧嫁过老公过日子扮演陈乔恩的妈的扮演者是谁 放羊的星星发哥的结局 指甲的颜色是奶白的,不是正常的透明的.是缺少什么元素么? 当老公在意你的过去怎么办四种办法帮你轻松解决 想遮房顶横梁的丑?用这4种方法轻松化解! 老婆不愿意和我沟通怎么办四种方法教你轻松解决 优信二手车公户怎么加入滴滴 我在优信买的车一年的车可以加入滳滳快车吗?车在优信名下 往者传txt全集下载 书名忘了 求书名 求小说 求以前看过的一部小说,主角好像叫雷天风。请问书名是什么?他有一把刀,好像还有个狐狸老婆。 誰能推薦幾本好看的小說,武俠玄幻之類的,言情的不要。求大神帮助 我最近玩《最终幻想10.圣城危机》,我只想看里面的游戏动画,有什么方法和网址么? 哪里能看到最终幻想10的全过关动画? 最终幻想10 最终幻想X 视频 最终幻想10,12全游戏CG动画 最终幻想10 视频提取问题 急!!! 求最终幻想10的视频 最终幻想10 11 12 的游戏视频? 最终幻想10游戏动画哪里能看 最终幻想X 游戏视频BT下载 饭团网电话是什么?想问问他们一些问题。