数据结构: 数组与字符串问题

来源:互联网 发布:软考程序员考什么 编辑:程序博客网 时间:2024/05/23 21:18

问题1: 实现算法判断字符串中的所有字符是否是独一无二的, 若限制不能使用额外的数据结构

方法:

/************************************************************************** 文件: unique_char.c* 作者: fantasy* 邮箱: fantasy@gmail.com * 创建时间: 2016年02月21日 星期日 16时39分08秒*************************************************************************/#include <stdio.h>#include <stdbool.h>#include <string.h>bool is_unique_char(char str[]){    bool alphabet[256] = {false};    int  i = 0;    for (i = 0; i < strlen(str); i++) //strlen(char *p): 计算字符串长度    {        if (alphabet[str[i]])            return false;        else            alphabet[str[i]] = true;    }    return true;}int main(){    char str[][10] ={"hello",                      "World",                     "fantasy"};    int i = 0;    //sizeof(str)/sizeof(str[0]): 计算二维数组的行数    //sizeof(str[0])/sizeof(str[0][0]): 计算二维数组的列数    for (i = 0; i < sizeof(str)/sizeof(str[0]); i++)     {        if (!is_unique_char(str[i]))        {            printf("%s: not has all unique characters\n", str[i]);        }        else        {            printf("%s: has all unique characters\n", str[i]);        }    }    return 0;}

问题2: 算法实现C风格字符串翻转(C风格字符串意味着"abcd"表示5个字符, 包括空字符)

方法:

/************************************************************************** 文件: reverse_string.c* 作者: fantasy* 邮箱: fantasy@gmail.com * 创建时间: 2016年02月21日 星期日 17时19分13秒*************************************************************************/#include<stdio.h>void reverse_str(char *str){    char *end = str;    char tmp;    if (str)    {        while(*end)        {            ++end;        }        --end;        while(str < end)        {            tmp = *str;            *str++ = *end;            *end-- = tmp;        }    }}int main(){    char str[] = "Hello, I have a dream";    printf("the string:          %s\n", str);    reverse_str(str);    printf("The reversed string: %s\n", str);    return 0;}


0 0