简体   繁体   中英

Checking if the first character of all the strings are same or not in a array of strings

I have an array of strings, I want to check whether the first characters of all the strings are the same or not.

I know how to retrieve the first character of a string, by this method

char first_letter;
first_letter = (*str)[0];

Initially, I thought to go the brute force way, by checking for the first letter for every strings, using a nested for loop.

 int flag = 0
 char f1,f2;
 for(int i = 0;i < size_arr - 1;i++){
   f1 = (*str[i])[0];
   for(int j = i + 1;j < size_arr;j++){
     f2 = (*str[j])[0];
     if(f1 != f2)
       flag += 1;
    }
}
if(!(flag))
  cout<<"All first characters same";
else
  cout<<"Different";
      

But I need an approach to find whether the first letters of all the strings present in an array are the same or not. Is there any efficient way?

I made this C approach for you (it's because you have used character arrays here, not std::string of C++ – so it's convenient to describe using C code):

#include <stdio.h>

#define MAX_LENGTH 128

int main(void) {
    char string[][MAX_LENGTH] = {"This is string ONE.", "This one is TWO.",
                                 "This is the third one."};
    char first_letter = string[0][0];
    int total_strs = sizeof(string) / sizeof(string[0]);
    int FLAG = 1;

    // Iterate through each letter of each string
    for (int i = 0; i < total_strs; i++)
        // First letter of the string is equal to first_letter?
        if (string[i][0] != first_letter) {

            FLAG = 0; // set to 0 as soon as it finds
            break;    // the initial_letter is NOT equal to the first
        }             // letter

    if (FLAG)
        fprintf(stdout, "The strings have the same initial letters.\n");
    else
        fprintf(stdout, "Not all strings have the same initial letters.\n");

    return 0;
}

If you want to convert it to a C++ code, no big issue – just replace stdio.h with iostream , int FLAG = 1 with bool FLAG = true , fprintf() to std::cout statements, that's it.

In case you need to work with std::string for the same job, just simply get the array of those strings, set the flag as true by default, iterate through each string, and match in case the first string's initial letter is equivalent to others, eventually, mark the flag as false in as soon as a defected string is found.


The program will display (if same initial vs. if not):

The strings have the same initial letters.
Not all strings have the same initial letters.

You needn't use a nested for loop.Rather modify your code this way

for(int i = 0;i < size_arr - 2;i++){
   f1 = (*str[i])[0];
   f2 = (*str[i+1])[0];
   if( f1!=f2 ){
      printf("not same characters at first position");
      break;
      flag=1;
   }
}
if(flag==0)printf("same characters at first position");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM