程序员面试金典C实现

发表于:2018-1-24 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:52coder    来源:52coder

  确定字符互异
  题目描述
  请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
  给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
  测试样例:
"aeiou"
返回:True
"BarackObama"
返回:False
#include <stdio.h>
#include <stdbool.h>
bool checkdiff(char *iniString)
{
int a[256]={0};
for(int i=0;iniString[i]!='\0';i++)
{
if(a[iniString[i]] != 0)
return false;
else
a[iniString[i]]=1;
}
return true;
}
int main(int argc, const char * argv[])
{
char str[]="abcde";
printf("%d",checkdiff(str));
return 0;
}
  反转字符串
  请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。
  给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。
  测试样例:
"This is nowcoder"
返回:"redocwon si sihT"
Java实现
class Reverse {
public:
string reverseString(string iniString) {
int n=iniString.size();
for(int i=0;i<n/2;i++)
{
char temp=iniString[n-i-1];
iniString[n-i-1]=iniString[i];
iniString[i]=temp;
}
return iniString;
}
};
  本书中的大部分题目都可以在牛客网在线验证提交,代码部分由于采用java验证,因此略有不同,比如java中可以通过iniString.size()获取元素个数.
  C实现时由于函数接口为void reverse(char *str),所以实现方式不同:
#include <stdio.h>
void reverse(char *str)
{
/*str为空,返回,规避解引用空指针*/
if(str == NULL)
return;
char *end = str;
char temp;
while(*end!='\0')
{
end++;
}
/*此时end指向\0,需要指向前一个反转的字符*/
end--;
while(str < end)
{
temp = *str;
*str++ = *end;
*end-- = temp;
}
}
int main(int argc, const char * argv[])
{
char str[]="abcde";
reverse(str);
printf("%s\n",str);
/*程序中不判空,会出现coredump*/
reverse(NULL);
return 0;
}
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号