由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 懒得写了,想练手的就写写贴在这里吧
相关主题
Microsoft interview questionC++ online Test 又一题
为什么我这段简单的程序segment faultC++ 一题
C的argc问题一题
c++ 程序一问你们看过programming pearls (2nd edition English) or 正在看的同学们
一道C语言题one c++ question
hasPathSumbloomberg assessment的机经,c语言的(20道题)
large file的一道题这题哪错了?
map numbers to strings这个看着很白痴的问题有更好的解法吗?
相关话题的讨论汇总
话题: string话题: char话题: tail话题: argc话题: len
进入JobHunting版参与讨论
1 (共1页)
b***m
发帖数: 5987
1
某公司recruiter发来题目,看着没兴趣啊,不过有想C++练手的可以写着玩玩:
void string_reverse1(char *string)
{
/* your code here */
}
char *string_reverse2(const char *string)
{
/* your code here */
}
Q*******e
发帖数: 939
2
现在recruiter都发考题了?
void string_reverse1(char *string)
{
int len = 0;
char * str = string;
char * head = string;
char * tail;
len = 0;
while (*str++) len++;

tail = head + len;
while (head < tail) {
swap(*head, *tail);
head++; tail--;
}
}

【在 b***m 的大作中提到】
: 某公司recruiter发来题目,看着没兴趣啊,不过有想C++练手的可以写着玩玩:
: void string_reverse1(char *string)
: {
: /* your code here */
: }
: char *string_reverse2(const char *string)
: {
: /* your code here */
: }

b***m
发帖数: 5987
3

嗯,有些公司确实这么做,还有online考试的……

【在 Q*******e 的大作中提到】
: 现在recruiter都发考题了?
: void string_reverse1(char *string)
: {
: int len = 0;
: char * str = string;
: char * head = string;
: char * tail;
: len = 0;
: while (*str++) len++;
:

Q*******e
发帖数: 939
4
//caller has to free memory allocated
char *string_reverse2(const char *string)
{
int len;
char * str = string;
char * res;
len = 0;
while (*str++) len++;
str--;
res = (char*) malloc(len + 1);
//sanity check here
while (len > 0) {
*res++ = *str--;
len--;
}
*res = '\0';
return res;
}

【在 b***m 的大作中提到】
:
: 嗯,有些公司确实这么做,还有online考试的……

b***m
发帖数: 5987
5

突然对const有些迷糊了:const char *定义的参数,是说这个参数string变量本身不
能被修改,还是它对应的字符串空间的内容不能被修改?

【在 Q*******e 的大作中提到】
: //caller has to free memory allocated
: char *string_reverse2(const char *string)
: {
: int len;
: char * str = string;
: char * res;
: len = 0;
: while (*str++) len++;
: str--;
: res = (char*) malloc(len + 1);

Q*******e
发帖数: 939
6
const char * string; // 内容只读
char * const string; //指针只读
const char * const string; //两者都只读

【在 b***m 的大作中提到】
:
: 突然对const有些迷糊了:const char *定义的参数,是说这个参数string变量本身不
: 能被修改,还是它对应的字符串空间的内容不能被修改?

l*****a
发帖数: 559
7
是字符串空间里的内容不能被修改。

【在 b***m 的大作中提到】
:
: 突然对const有些迷糊了:const char *定义的参数,是说这个参数string变量本身不
: 能被修改,还是它对应的字符串空间的内容不能被修改?

b***m
发帖数: 5987
8

唉,用了那么多年C++,一直还是觉得C++很坑爹啊!

【在 Q*******e 的大作中提到】
: const char * string; // 内容只读
: char * const string; //指针只读
: const char * const string; //两者都只读

b***m
发帖数: 5987
9
QuickTime你的第二个函数是不是会把'\0'拷贝到res的第一个字符位置哦?
Q*******e
发帖数: 939
10
随便写了写, 没有检查, 用test case看看呢
给个test case

【在 b***m 的大作中提到】
: QuickTime你的第二个函数是不是会把'\0'拷贝到res的第一个字符位置哦?
相关主题
hasPathSumC++ online Test 又一题
large file的一道题C++ 一题
map numbers to strings一题
进入JobHunting版参与讨论
b***m
发帖数: 5987
11
哦,不会,在进入while loop之前,str已经减1了一次了。

【在 Q*******e 的大作中提到】
: 随便写了写, 没有检查, 用test case看看呢
: 给个test case

l*****a
发帖数: 14598
12
Please try nu

【在 Q*******e 的大作中提到】
: 随便写了写, 没有检查, 用test case看看呢
: 给个test case

s********k
发帖数: 6180
13
char * str = string;?
编译能过吗?貌似不能assign const char* to char*吧

【在 b***m 的大作中提到】
: 哦,不会,在进入while loop之前,str已经减1了一次了。
b***m
发帖数: 5987
14
应该可以的。也许需要强制转换?

【在 s********k 的大作中提到】
: char * str = string;?
: 编译能过吗?貌似不能assign const char* to char*吧

s********k
发帖数: 6180
15
至少我记得不行,可以const char* = char*, 但是不能反过来。
刚用VC编译了一下也报错了。

【在 b***m 的大作中提到】
: 应该可以的。也许需要强制转换?
b***m
发帖数: 5987
16
加强制转换呢?

【在 s********k 的大作中提到】
: 至少我记得不行,可以const char* = char*, 但是不能反过来。
: 刚用VC编译了一下也报错了。

s********k
发帖数: 6180
17
可以,另外这个程序也有bug,返回的res已经是string末尾的指针,不是头指针

【在 b***m 的大作中提到】
: 加强制转换呢?
b***m
发帖数: 5987
18

嗯,这个我看到了,我的版本是这样:
// caller has to free memory allocated
char *string_reverse2(const char *string)
{
if( !string ) return NULL;
int len = strlen(string);
char *res = (char *)malloc(len + 1);
if( !res ) return NULL;

char *str = (char *)string + len - 1;
while( str >= string )
{
*res = *str;
res++;
str--;
}
*res = '\0';
return res;
}

【在 s********k 的大作中提到】
: 可以,另外这个程序也有bug,返回的res已经是string末尾的指针,不是头指针
s********k
发帖数: 6180
19
你这个不是一样吗?也是res在string end?

【在 b***m 的大作中提到】
:
: 嗯,这个我看到了,我的版本是这样:
: // caller has to free memory allocated
: char *string_reverse2(const char *string)
: {
: if( !string ) return NULL;
: int len = strlen(string);
: char *res = (char *)malloc(len + 1);
: if( !res ) return NULL;
:

b***m
发帖数: 5987
20

我擦,删代码删多了……

【在 s********k 的大作中提到】
: 你这个不是一样吗?也是res在string end?
相关主题
你们看过programming pearls (2nd edition English) or 正在看的同学们这题哪错了?
one c++ question这个看着很白痴的问题有更好的解法吗?
bloomberg assessment的机经,c语言的(20道题)帮看看这段code
进入JobHunting版参与讨论
Q*******e
发帖数: 939
21
gcc 报告warning
str_reverse2.c: In function `string_reverse2':
str_reverse2.c:7: warning: initialization discards qualifiers from pointer
target type

【在 s********k 的大作中提到】
: 至少我记得不行,可以const char* = char*, 但是不能反过来。
: 刚用VC编译了一下也报错了。

c********s
发帖数: 817
22
This is my implementation for these two functions, and a driver to run them.
cat string_reverse.c
#include
#include
#include
void swap(char* c1, char* c2);
// -----------------
void string_reverse1(char* string) {
if (string == NULL)
return;
char* head = string;
char* tail = head;
// find the tail
while (*tail) ++tail;
--tail;
// while loop to do the swap
while (head < tail)
swap(head++, tail--);
}
// -----------------
// the caller of this function is responsible to free the memory
// of the newly created string.
char* string_reverse2(const char* string) {
if (string == NULL)
return NULL;
const char* tail = string;
int len = 0;
// determine the length of the string and its tail
while (*tail) {
++tail;
++len;
}
--tail;

// malloc a new string
char* r = (char*)malloc(sizeof(char)*(len+1));
if (r == NULL) {
printf("r == NULL\n");
exit(-1);
}

// while loop to copy the string backward
char* head = r;
while (tail >= string) {
*head = *tail;
++head;
--tail;
}
*head = '\0';

return r;
}
// -----------------
int main(int argc, char** argv) {
// use string_reverse2
int argc_in = argc;
while (argc_in-- != 0) {
char* reversed = string_reverse2(argv[argc_in]);
printf("arg[%d] = %s, reversed = %s\n", argc_in, argv[argc_in], reversed
);
free(reversed); reversed = NULL;
}
char* empty = "";
printf("empty = %s ", empty);
string_reverse1(empty);
printf("reversed = %s\n", empty);
printf("**************************************\n");
// use string_reverse1
argc_in = argc;
while (argc_in-- != 0) {
printf("arg[%d] = %s ", argc_in, argv[argc_in]);
string_reverse1(argv[argc_in]);
printf("reversed = %s\n", argv[argc_in]);
}
empty = "";
printf("empty = %s ", empty);
string_reverse1(empty);
printf("reversed = %s\n", empty);
return 0;
}
void swap(char* c1, char* c2) {
assert(c1 != NULL && c2 != NULL);
char tmp = *c1;
*c1 = *c2;
*c2 = tmp;
}
l*********8
发帖数: 4642
23
char * string_reverse1(char *string)
{
if (string) {
for(int i=0, j=strlen(string)-1; i < j; i++, j--)
swap(string[i], string[j]);
}
return string;
}
char *string_reverse2(const char *string)
{
return string_reverse1(strdup(string));
}

【在 b***m 的大作中提到】
: 某公司recruiter发来题目,看着没兴趣啊,不过有想C++练手的可以写着玩玩:
: void string_reverse1(char *string)
: {
: /* your code here */
: }
: char *string_reverse2(const char *string)
: {
: /* your code here */
: }

c********s
发帖数: 817
24
nice!

【在 l*********8 的大作中提到】
: char * string_reverse1(char *string)
: {
: if (string) {
: for(int i=0, j=strlen(string)-1; i < j; i++, j--)
: swap(string[i], string[j]);
: }
: return string;
: }
: char *string_reverse2(const char *string)
: {

a*****1
发帖数: 314
25
如果 输入 是 char * s = "hello world"; 的话
是不是 只能用 第二个了???? 因为 s 里的字符改变不了。。
char *string_reverse2(const char *string)
{
/* your code here */
}
T*********s
发帖数: 17839
26
a recruiter in FB sent a link to my linked in account
i checked in and see some document on line
i browsed them and email him some feedback
then he called me to arrange interview but i rejected

【在 Q*******e 的大作中提到】
: 现在recruiter都发考题了?
: void string_reverse1(char *string)
: {
: int len = 0;
: char * str = string;
: char * head = string;
: char * tail;
: len = 0;
: while (*str++) len++;
:

a*****n
发帖数: 158
27
这是考的就是IN-PLACE REVERSE 和 非IN-PLACE REVERSE吧。。。。
1 (共1页)
进入JobHunting版参与讨论
相关主题
这个看着很白痴的问题有更好的解法吗?一道C语言题
帮看看这段codehasPathSum
问一道kth smallest element的题目large file的一道题
leetcode上一题,求正解map numbers to strings
Microsoft interview questionC++ online Test 又一题
为什么我这段简单的程序segment faultC++ 一题
C的argc问题一题
c++ 程序一问你们看过programming pearls (2nd edition English) or 正在看的同学们
相关话题的讨论汇总
话题: string话题: char话题: tail话题: argc话题: len