1. 程式人生 > >c語言遍歷字串陣列的方法

c語言遍歷字串陣列的方法

在這裡我們重點介紹遍歷字串的三種方法。   首先我們來看一道程式設計題目:   輸入一個字串,且都是數字,也可以是負數,轉化成相應的整型數並輸出,若輸入字母則停止。   我們知道,在C語言裡有一個函式是“atoi”,它可以把字串轉換成整型數,包含在標頭檔案stdlib.h中。以下是我們使用了這個函式的程式碼。 [objc] view plain copy print?
  1. #include <stdio.h>
  2. #define MAX_SIZE 1024
  3. int main()  
  4. {  
  5.     char str[MAX_SIZE] = {0};  
  6.     int result;  
  7.     int i;  
  8.     printf("Please input string : ");  
  9.     gets(str);  
  10.     result = atoi(str);  
  11.     printf("result = %d\n",result);  
  12.     return0;  
  13. }  
#include <stdio.h>

#define MAX_SIZE 1024

int main()
{
    char str[MAX_SIZE] = {0};
    
    int result;
    int i;

    printf("Please input string : ");
    gets(str);

    result = atoi(str);

    printf("result = %d\n",result);

    return 0;
}
執行結果: 正數: [objc] view plain copy print?
  1. Please input string : 123456
  2. result = 123456
Please input string : 123456
result = 123456

負數: [objc] view plain copy print?
  1. Please input string : -123456
  2. result = -123456
Please input string : -123456
result = -123456
帶字母的字串: [objc] view plain
copy print?
  1. Please input string : 123a456
  2. result = 123
Please input string : 123a456
result = 123

  使用“atoi”函式做這道題很簡單,那麼我們能不能自己寫一個函式來實現把字串轉換成整型數的功能呢?下面是我們自己寫一個函式來實現把字串轉換成整型數的功能的程式碼。 [objc] view plain copy print?
  1. #include <stdio.h>
  2. #define MAX_SIZE 1024
  3. int my_atoi(charchar *str)  
  4. {  
  5.     int i = 0;  
  6.     int result = 0;  
  7.     int flag = 1;  
  8.     if (*str == '-')  
  9.     {  
  10.         flag = -1;  
  11.         str++;  
  12.     }  
  13.     while (*str != '\0')  
  14.     {  
  15.         if (*str >= '0' && *str <= '9')  
  16.         {  
  17.             result = result * 10 + ( *str - '0' );  
  18.         }  
  19.         else
  20.         {  
  21.             break;  
  22.         }  
  23.         str++;  
  24.     }  
  25.     returnresult *flag;  
  26. }  
  27. int main()  
  28. {  
  29.     char str[MAX_SIZE] = {0};  
  30.     int result;  
  31.     int i;  
  32.     printf("Please input string : ");  
  33.     gets(str);  
  34.     result = my_atoi(str);  
  35.     printf("result = %d\n",result);  
  36.     return0;  
  37. }  
#include <stdio.h>

#define MAX_SIZE 1024

int my_atoi(char *str)
{
    int i = 0;
    int result = 0;
    int flag = 1;

    if (*str == '-')
    {
        flag = -1;
        str++;
    }

    while (*str != '\0')
    {
        if (*str >= '0' && *str <= '9')
        {
            result = result * 10 + ( *str - '0' );
        }
        else
        {
            break;
        }

        str++;
    }

    return result *flag;
}

int main()
{
    char str[MAX_SIZE] = {0};
    
    int result;
    int i;

    printf("Please input string : ");
    gets(str);

    result = my_atoi(str);

    printf("result = %d\n",result);

    return 0;
}

執行結果: 正數: [objc] view plain copy print?
  1. Please input string : 987654321
  2. result = 987654321
Please input string : 987654321
result = 987654321

負數: [objc] view plain copy print?
  1. Please input string : -123456789
  2. result = -123456789
Please input string : -123456789
result = -123456789
帶字母: [objc] view plain copy print?
  1. Please input string : 123456a789
  2. result = 123456
Please input string : 123456a789
result = 123456

  我們可以看到,用我們自己編寫的函式執行的結果也是正確的。那麼我們該怎麼樣編寫這個函式呢?其實這裡主要的知識點是字串的遍歷問題。如果我們想把字串轉化成整型數,那麼我們需要一個一個地訪問字串裡的內容,即字串遍歷。   首先我們介紹遍歷字串的三種方法: 1. for迴圈(字元陣列) [objc] view plain copy print?
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX_SIZE 1024
  4. int main()  
  5. {  
  6.     char src[MAX_SIZE] = {0};  
  7.     int i;  
  8.     int len;  
  9.     printf("Please input string : ");  
  10.     gets(src);  
  11.     len = strlen(src);  
  12.     printf("string = ");  
  13.     for (i = 0; i < len; i++)  
  14.     {  
  15.         printf("%c",src[i]);  
  16.     }  
  17.     printf("\n");  
  18.     return0;  
  19. }  
#include <stdio.h>
#include <string.h>

#define MAX_SIZE 1024

int main()
{
    char src[MAX_SIZE] = {0};

    int i;

    int len;

    printf("Please input string : ");
    gets(src);

    len = strlen(src);

    printf("string = ");

    for (i = 0; i < len; i++)
    {
        printf("%c",src[i]);
    }

    printf("\n");

    return 0;
}
執行結果:
[objc] view plain copy print?
  1. Please input string : abcdefg123456
  2. string = abcdefg123456
Please input string : abcdefg123456   
string = abcdefg123456
  在這裡我們首先利用了strlen函式測量字元陣列的長度,然後用for迴圈遍歷字串,將輸入的字串的內容一個字元一個字元輸出。 2. while迴圈(字元陣列) [objc] view plain copy print?
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX_SIZE 1024
  4. int main()  
  5. {  
  6.     char src[MAX_SIZE] = {0};  
  7.     int i = 0;  
  8.     printf("Please input string : ");  
  9.     gets(src);  
  10.     printf("string = ");  
  11.     while (src[i] != '\0')  
  12.     {  
  13.         printf("%c",src[i]);  
  14.         i++;  
  15.     }  
  16.     printf("\n");  
  17.     return0;  
  18. }  
#include <stdio.h>
#include <string.h>

#define MAX_SIZE 1024

int main()
{
    char src[MAX_SIZE] = {0};

    int i = 0;

    printf("Please input string : ");
    gets(src);

    printf("string = ");

    while (src[i] != '\0')
    {
        printf("%c",src[i]);
        i++;
    }

    printf("\n");

    return 0;
}
執行結果: [objc] view plain copy print?
  1. Please input string : congcong123456
  2. string = congcong123456
Please input string : congcong123456
string = congcong123456

  由於輸入的字串的長度是未知的,然而我們遍歷字串的時候需要用到迴圈,我們知道當迴圈次數未知時,最好使用while語句。 3.while迴圈(指標) [objc] view plain copy print?
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAX_SIZE 1024
  4. int main()  
  5. {  
  6.     char src[MAX_SIZE] = {0};  
  7.     charchar *temp = src;  
  8.     printf("Please input string : ");  
  9.     gets(src);  
  10.     printf("string = ");  
  11.     while (*temp != '\0')  
  12.     {  
  13.         printf("%c",*temp);  
  14.         temp++;  
  15.     }  
  16.     printf("\n");  
  17.     return0;  
  18. }  
#include <stdio.h>
#include <string.h>

#define MAX_SIZE 1024

int main()
{
    char src[MAX_SIZE] = {0};
    char *temp = src;

    printf("Please input string : ");
    gets(src);

    printf("string = ");

    while (*temp != '\0')
    {
        printf("%c",*temp);
        temp++;
    }

    printf("\n");

    return 0;
}
執行結果: [objc] view plain copy print?
  1. Please input string : congcong123
  2. string = congcong123
Please input string : congcong123
string = congcong123

  在這裡我們首先定義了一個指標變數,指向陣列的首地址,那為什麼要定義這個指標變數呢?為什麼不直接用“src++;”呢?   首先,我們要知道的是陣列名代表了什麼:      ①指標常量      ②陣列首元素的地址   既然陣列名代表了指標常量,常量怎麼可以自增呢?所以不可以用“src++;”,如果使用“src++;”,那麼在編譯時便會報錯“錯誤:自增運算中的左值無效”。   以上為遍歷字串的三種方法,希望我們以後可以熟練地運用這三種方法遍歷字串。   在上述“將字串轉化成整型數”的程式設計題中,還有一個小知識點,就是如何準確地將正數和負數表示出來。首先我們可以利用一個“flag”,我們將flag初始化為1,符號會出現在我們所輸入的字串的首位,只需要判斷這個是不是‘-’,如果是的話,將flag置為-1,最後將結果與flag相乘即可,如果是正數,則不用管,正數乘1還是原數。